Патч для imagecache - наложение водяных знаков + подложение подложки
http://drupal.org/node/184816
Дополнительные возможности (по сравнению с imagecache):
1. Использование временного дополнительного слоя (подложки).
2. Выбор размера и цвета фона.
3. Наложение картинок с прозрачностью.
4. Создание "Водяных знаков" (watermark) при использовании файлов *.png
(файл маски должен находиться в www.site.com/files/watermark.png)
5. Текстовые водяные знаки (текст поверх картинки)
6. Произвольный php-код (например можно написать на картинке заголовок ноды)
UPD:
Последняя версия imagecache_watermarks_v017-imagecache-5.x-1.5.module.patch здесь:
http://drupal.org/node/184816
Вложение | Размер |
---|---|
imagecache.zip | 23.24 КБ |
settings1.zip | 24.29 КБ |
settings2.zip | 47.63 КБ |
settings1.rar | 24.25 КБ |
settings2.rar | 45.94 КБ |
Комментарии
пример использования плиз. не понятно как что действует. во всяком случае мне.
Сделал imagecache.patch.
Например нужно сделать красную рамку и кинуть водяной знак
Инстркуция такая:
1. Создаем подложку-временный слой "temp layer" с нужным размером и цветомRGB (200х100 R255;G000;B000 )
Задаем вес : -10
2. Ресайзим картинку функцией scale до размеров 196х96 опции "Outside dimensions" - чтобы картинка превышала подложку.
Задаем вес : -9
3. Обрезаем картинку функцией Crop до размеров 196х96 опции "center", "center".
Задаем вес : -8
4.Копируем картинку на подложку-временный слой "temp layer" функцией "Copy image to temp layer"
X offset:center
Y offset:center
alpha(прозрачность): 90
Задаем вес : -7
5.Копируем файл водяной знак "www.site.com/files/watermark.png" на подложку-временный слой "temp layer" функцией "Copy file to temp layer"
X offset:right
Y offset:bottom
alpha(прозрачность): 90
Задаем вес : -6
6. Меняем местами временный слой "temp layer" и изображение функцией "Swap image and temp layer" чтобы в файл вместо изображения был сохранен временный слой "temp layer".
Задаем вес : -5
В результате получаем картинку 200х100 с 2х пиксельной красной рамкой и водяным знаком поверх картинки.
Что еще можно сделать:
- Можно на подложку кинуть изображение красивой рамки (или нсколько).
- Можно скопировать изображение на подложку несколько раз с разными размерами и в разных местах.
- Можно поверх кинуть несколько водяных знаков.
А можно ли сюда еще выложить пропатченный модуль? Или изначальный? А то на cvs уже немного другая dev-версия валяется.
upd Включил модуль, который приаттачен в первом сообщении - никаких изменений в админке, в настройках модуля не вижу. =\
Должны появиться новые действия (кроме scale, crop и resize)
Так... вообщем не появлялись они, видимо, из-за того, что не был поставлен exif модуль. Предупреждения бы выдать...
При работе модуль выдает ошибки -
* warning: getimagesize(files/imagecache/small/files/gallery/06.jpg) [function.getimagesize]: failed to open stream: No such file or directory in /home/username/data/www/usernameugi.net/sites/default/modules/imagecache/imagecache.module on line 268.
* warning: filesize() [function.filesize]: Stat failed for files/imagecache/small/files/gallery/06.jpg (errno=2 - No such file or directory) in /home/username/data/www/site.net/sites/default/modules/imagecache/imagecache.module on line 271.
* warning: fopen(files/imagecache/small/files/gallery/06.jpg) [function.fopen]: failed to open stream: No such file or directory in /home/username/data/www/site.net/includes/file.inc on line 562.
Может все-таки стоит писать в files/tmp, чем во временную папку самого сервера?
Чорт, опять невнимательность подвела, забыл создать в начале TempLayer... Думал он сам автоматом создается при обработке.
Гранд-респект, уважаемый Dimm.
Странный баг - при изменении настроек пресета (было для templayer 200x200, поставил 30%х30%) - изображения не обновлялись. Сделал "flush preset images" - вообще удалилась папка files/imagecache/presetname, и изображения не создавались.
Плюс почему-то не могу получить водяной знак для большого изображения (хотя разница только в размерах templayer - для превьюшки 200х200, для оригинального - 100% x 100%). Просто не создает изображения.
Вообщем идея хороша, но реализация пока глючная какая-то.
upd Сейчас просматривал папку /tmp - все изображения, оказывается, валяются там... Получается, модуль не всегда копирует чтоль их в нужную папку?
upd2 Притом имена файлов вида:
small01.jpg, small02.jpg, big01.jpg, big02.jpg.
Имена пресетов у меня были small и big, а фоток - 01.jpg и 02.jpg. Т.е. отсутствует слеш.
small01.jpg, small02.jpg, big01.jpg, big02.jpg. - это временные файлы, создаваемые при работе скрипта.
Если скрипт не смог отработать нормально, то он завершает свою работу не удаляя эти файлы и он не создаст новые 01.jpg и 02.jpg пока не удалить временные файлы вручную.
А пофиксить это реально? Или это изначальная идеология imagecache?
imagecache так работает
Добавил текстовые водяные знаки, возможность создавать несколько слоев, вставки php-кода.
imagecache_watermarks_patch v0.12
Features:
1. Watermarks.
2. Text watermarks.
3. You can define same canvas.
4. You can make same copy of source image to canvas (different size each copy of source image).
5. You can make same copy of image from file to canvas (different size each copy of image from file).
6. You can use php code to change same parameters.
7. Replace source image by file (To resize watermark file for example).
Usage:
To overlay watermark:
1. Define canvas
2. Scale source image
3. Overlay: source image to canvas
4. Overlay: file image to canvas (watermark)
5. Return canvas
To overlay text watermark:
1. Define canvas
2. Scale source image
3. Overlay: source image to canvas
4. Overlay: text to canvas
5. Return canvas
To resize watermark and overlay watermark:
1. Define canvas
2. Scale source image
3. Overlay: source image to canvas
4. Replace source image by file (watermark)
5. Scale source image
6. Overlay: file image to canvas (watermark)
7. Return canvas
Теперь на картинку можно наложить текст с названием ноды
imagecache_watermarks_patch v0.13
Features:
8. Now you can overlay text watermarks as $node->title and other...
9. It made by pass same variables to imagecach module by adding "?nid=123" string to sourse image path "files/images/foto.jpg"
Usage:
print theme('imagecache', 'my1', "files/images/". $item['filename']."?"."nid=".$node->nid, $node->title, $node->title);
It make code as
...
- only first time.
After, if rezult image is made, it make code whithout "?nid=123" as:
...
Usage:
To overlay $node->title watermark:
1. Define canvas
2. Scale source image
3. Overlay: source image to canvas
4. Overlay: text to canvas
Php code(example):
$nid = isset($_GET['nid']) ? $_GET['nid'] : '';
if($nid && is_numeric($nid)){
$node=node_load($nid);
$action['data']['text']=$node->title;
}
5. Return canvas
класс!
только не получилось у меня самостоятельно справиться..
в личную почту вам написала!
Смотри здесь:
http://drupal.org/node/184816
Вот последняя версия
http://drupal.org/files/issues/imagecache_watermarks_v016.zip
Вот тут пример настройки
http://drupal.org/files/issues/imagecache_example_3.png
Последняя версия imagecache_watermarks_v017-imagecache-5.x-1.5.module.patch здесь:
http://drupal.org/node/184816
Патч просто супер!!! Обязательно буду его использовать. Пока все работает даже печать текста.
Вот только одна проблема. Иногда бывает нужно построить изображение, если самого исходного изображения в поле нету. Есть ли какой-нибудь простой выход из этой ситуации?
Вот пример когда это нужно. Допустим необходимо нарисовать что-то типа грамоты участника конкурса. Картинка-шаблон у грамоты одна и та же для всех участников. Меняется только автор, степень награждения и проч. поля, которые есть в текстовых полях. Как быть в таком случае? Загружать всем участникам в поле картинки шаблон грамоты - кажется довольно глупо.
imagecache_watermarks_patch v0.18
http://drupal.org/node/184816#comment-828230
12. Вы можете использовать картинку по умолчанию если основная картинка не существует.
Вставьте этот код в поле "Php code" первого экшена (define_canvas) вашего пресета
<?php
if (!is_file($source)) {
$path='files/default_image.jpg';
}
?>
если исходной картинки нет, то:
1) какие в таком случае будут генерироваться имена файлов в директории imagecache?
2) overlay_file _image_to_canvas при этом не нужен?
я попробовал вот так, но картинка не строится.
файл files/default_image.jpg существует.
1. имена файлов будут одинаковые - поэтому в Вашем случае заполнения диплома это не подойдет .
Придется вводить в каждую ноду шаблон диплома.
2. не нужен.
Странно, у меня раотает.
1. но ведь можно динамически генерировать имя файла, например, так $default_img_name . $nid ?
генерировать можно, сам про это подумал, но при построении пути к картинке такой путь не сделать.
На основе патча сделали новый модуль Imagecache Actions
http://drupal.org/project/imagecache_actions
Спасибо!!!!!!!
Все таки ссылку на пример то можно? Хотелось бы посмотреть как это выгладит!
А для 6.х будет порт?
http://drupal.org/project/imagecache_actions
Извините, подскажите пожалуйста - не могу что-то найти... а где указывать С ЧЕМ делать этот экшн? не со всеми ведь встречающимися картинками! --- нужно только для галлерейных...
Стоит Drupal 6 - версии модулей все последние что нужно. (imageApi и т.д.).
c imagecache
да нет же экшн ведь и так в imagecache создается
вот создал я в imagecache нужный экшн - а дальше?
Display fields в настройках типа материаллов
Помогите дальше пожалста ----
ничего не сохраняется в конечной папке для imagecache!!!
Кстати в какой момент он генерит свои файлы? в момент загрузки при создании материала или же при выводе? он вообще на лету действует или заранее?
Файл генерируются если к нему обратились, а он не существует.
Я создал новый preset для добавления watermark
Что мне теперь надо написать в файле шаблона ноды, если я вывожу изображение как
<?php echo reset($node->files)->filepath;?>"
Есть ли какой нибудь API
что бы прямо в шаблоне написать?
Либо что бы при загрузке файлов автоматически к загруженной картинке применялся этот пресет?
а обращаться как?
http://site.com/files/imagecache/MyPreset/image1.jpg
так?
у меня просто директория не создалась даже с именем пресета
или ее самому создать?
http://site.com/files/imagecache/MyPreset/files/image1.jpg
Очень странно - с LightBox2 ничерта не заработало -- заработало с Thickbox!
Но опять же странность есть - он тизеры выводит в галлерею с обработкой через imagecache -- а при нажатии открывает в Thickbox - но основную картину! исходную - не обработанную...
Это я так понимаю где-то настройка во Views должна быть чтобы он в ссылке ставил не обычную ссылку а через imagecache -- но так и не нашел сколько капался! а в тэмплэйтах Views там черт ногу сломит
может подскажете? уверен что решение там есть!
или подскажете как в template.php (или где-то типа того) перехватить вывод этого View -- Field -- Grid -- Page (не знаю какие еще данные нужны) - какие там переменные использовать?
Попробовал поставить contemplate - он почему-то не устанавливается в друпале 6 - просто не видится в списке модулей!
http://site.com/files/imagecache/MyPreset/files/image1.jpg
так не получается
пишет что файл запрашиваемый не существует
попробовал создать директории, которых не хватало
но результат тот же
чистые ссылки работают
картинки находятся в директории sites/default/files/
пробовал даже перестанавливать модуль
что может быть не так?
Где можно какую нибудь инструкцию найти?
С обычным imagecache не работал раньше
и с этим тем более
Может надо картинки через imagecache загружать на сервер? у него есть такая функция?
Разобрался.
To: evl-ntnt
- да нужно создать папку с именем пресета - дать ей обязательно права 777 (пока не сделал - не заработало).
Папке site/default/files/imagecache я тоже дал права 777.
с LightBox так и не разобрался - работает через ThickBox. Правда чтобы он при открытии картинки в Thickbox тоже применял правило пришлось править через переопределение шаблонов. (в ссылке у картинки достаточно просто поменять путь - вместо sites/default/files/image.jpg ---- сделать sites/default/imagecache/PresetName/files/image.jpg и все работает правильно.
Вот у меня другой вопрос ---
есть какая-то странность - при применении сначала overlay с прозрачностью 70% (например) (gif, png-8, png-24 пробовал)
а потом Scale ----
вся исходная картинка которая больше чем watermark (наложенный в Overlay) - становится синей. и получается вся картинка синяя кроме квадратика в сентре - там где водный знак... не пойму в чем дело...
Если же сначала Scale а потом Overlay -- накладывать водный знак то все ок - но только это не удобно потому что знак должен быть как для тисера так и для полного вида один и тот же...
Правда щас пришла в голову мысль просто сделать 2 файла картинок водного знака 2-х размеров... но... это как-то не элегантно
картинки находятся в директории sites/default/files/
тогда http://site.com/sites/default/files/imagecache/MyPreset/sites/default/fi...
To: Freakachoo
Огромное спасибо
все заработало
Скажите, а Imagecache+Imagecache_actions работают с модулем Image (с типом материал Image)?
Эхм, сам себе и отвечу. Нашел вот такой модуль http://drupal.org/node/231622#comment-1099594. Он добавляет в на страницу настройки /admin/settings/image/nodes возможность выбирать дополнительные пресеты imagecache.
Пока все работает...
Можно ли с помощью этого сделать изображения типа Демотиваторов. Если да подскажите как.
В настройках шаблона есть такой идентификатор как Namespace. Правильно ли я понимаю, что модуль ищет его наличие в пути к картинке и если она есть, выполняет определенные действия как задано самим шаблоном(накладывает водяные знаки, рамки и тп).
Т.е. что, все картинки, которые я хочу обработать надо держать в одноименной папке?
И еще пара вопросов:
Должен ли модуль перехватывать идентификатор из адресной строки если нода выводится по синониму пути?
Можно ли применить модуль только к определенному типу документов или только для определенных ролей?
Пользуйтесь http://drupal.org/project/imagecache_actions
Пользуйтесь http://drupal.org/project/imagecache_actions
о нем и речь, родимом