Водяные знаки: imagecache+watermark

Аватар пользователя Dimm Dimm 18 октября 2007 в 15:10

Патч для 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.zip23.24 КБ
Иконка пакета settings1.zip24.29 КБ
Иконка пакета settings2.zip47.63 КБ
Файл settings1.rar24.25 КБ
Файл settings2.rar45.94 КБ
0 Thanks

Комментарии

Аватар пользователя andron13 andron13 20 октября 2007 в 2:25

пример использования плиз. не понятно как что действует. во всяком случае мне.

Аватар пользователя Dimm Dimm 20 октября 2007 в 13:07

Сделал 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х пиксельной красной рамкой и водяным знаком поверх картинки.

Что еще можно сделать:
- Можно на подложку кинуть изображение красивой рамки (или нсколько).
- Можно скопировать изображение на подложку несколько раз с разными размерами и в разных местах.
- Можно поверх кинуть несколько водяных знаков.

Аватар пользователя KCEOH KCEOH 22 октября 2007 в 4:12

А можно ли сюда еще выложить пропатченный модуль? Или изначальный? А то на cvs уже немного другая dev-версия валяется.
upd Включил модуль, который приаттачен в первом сообщении - никаких изменений в админке, в настройках модуля не вижу. =\

Аватар пользователя KCEOH KCEOH 24 октября 2007 в 8:21

Так... вообщем не появлялись они, видимо, из-за того, что не был поставлен exif модуль. Предупреждения бы выдать...

При работе модуль выдает ошибки -


    * Выбранный файл /home/username/data/tmp/tempsmall06.jpg не удается скопировать, поскольку не найден файл с таким именем. Проверьте правильность указанного имени файла.
    * 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, чем во временную папку самого сервера?

Аватар пользователя KCEOH KCEOH 24 октября 2007 в 8:26

Чорт, опять невнимательность подвела, забыл создать в начале TempLayer... Думал он сам автоматом создается при обработке. :)

Гранд-респект, уважаемый Dimm. :)

Аватар пользователя KCEOH KCEOH 25 октября 2007 в 5:06

Странный баг - при изменении настроек пресета (было для 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. Т.е. отсутствует слеш.

Аватар пользователя Dimm Dimm 25 октября 2007 в 23:04

small01.jpg, small02.jpg, big01.jpg, big02.jpg. - это временные файлы, создаваемые при работе скрипта.
Если скрипт не смог отработать нормально, то он завершает свою работу не удаляя эти файлы и он не создаст новые 01.jpg и 02.jpg пока не удалить временные файлы вручную.

Аватар пользователя Dimm Dimm 7 ноября 2007 в 22:34

Добавил текстовые водяные знаки, возможность создавать несколько слоев, вставки 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

Аватар пользователя Dimm Dimm 10 ноября 2007 в 22:56

Теперь на картинку можно наложить текст с названием ноды

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

Аватар пользователя Zlata Zlata 17 марта 2008 в 20:14

класс!
только не получилось у меня самостоятельно справиться..
в личную почту вам написала! :)

Аватар пользователя PremAnup PremAnup 1 мая 2008 в 13:56

Патч просто супер!!! Обязательно буду его использовать. Пока все работает даже печать текста.

Вот только одна проблема. Иногда бывает нужно построить изображение, если самого исходного изображения в поле нету. Есть ли какой-нибудь простой выход из этой ситуации?
Вот пример когда это нужно. Допустим необходимо нарисовать что-то типа грамоты участника конкурса. Картинка-шаблон у грамоты одна и та же для всех участников. Меняется только автор, степень награждения и проч. поля, которые есть в текстовых полях. Как быть в таком случае? Загружать всем участникам в поле картинки шаблон грамоты - кажется довольно глупо.

Аватар пользователя Dimm Dimm 1 мая 2008 в 19:23

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';
}
?>

Аватар пользователя PremAnup PremAnup 2 мая 2008 в 4:52

если исходной картинки нет, то:
1) какие в таком случае будут генерироваться имена файлов в директории imagecache?
2) overlay_file _image_to_canvas при этом не нужен?
я попробовал вот так, но картинка не строится.
файл files/default_image.jpg существует.

Аватар пользователя Dimm Dimm 2 мая 2008 в 10:25

1. имена файлов будут одинаковые - поэтому в Вашем случае заполнения диплома это не подойдет .
Придется вводить в каждую ноду шаблон диплома.
2. не нужен.
Странно, у меня раотает.

Аватар пользователя PremAnup PremAnup 2 мая 2008 в 18:57

1. но ведь можно динамически генерировать имя файла, например, так $default_img_name . $nid ?

Аватар пользователя Dimm Dimm 2 мая 2008 в 20:33

генерировать можно, сам про это подумал, но при построении пути к картинке такой путь не сделать.

Аватар пользователя KTATTOO KTATTOO 12 октября 2008 в 18:53

Все таки ссылку на пример то можно? Хотелось бы посмотреть как это выгладит!

Аватар пользователя Freakachoo Freakachoo 28 октября 2008 в 22:10

Извините, подскажите пожалуйста - не могу что-то найти... а где указывать С ЧЕМ делать этот экшн? не со всеми ведь встречающимися картинками! --- нужно только для галлерейных...
Стоит Drupal 6 - версии модулей все последние что нужно. (imageApi и т.д.).

Аватар пользователя Freakachoo Freakachoo 29 октября 2008 в 12:27

да нет же :)))) экшн ведь и так в imagecache создается :)))
вот создал я в imagecache нужный экшн - а дальше?

Аватар пользователя Freakachoo Freakachoo 30 октября 2008 в 13:06

Помогите дальше пожалста ----
ничего не сохраняется в конечной папке для imagecache!!!
Кстати в какой момент он генерит свои файлы? в момент загрузки при создании материала или же при выводе? он вообще на лету действует или заранее?

Аватар пользователя evl-ntnt evl-ntnt 30 октября 2008 в 21:37

Я создал новый preset для добавления watermark
Что мне теперь надо написать в файле шаблона ноды, если я вывожу изображение как
<?php echo reset($node->files)->filepath;?>"

Есть ли какой нибудь API
что бы прямо в шаблоне написать?

Либо что бы при загрузке файлов автоматически к загруженной картинке применялся этот пресет?

Аватар пользователя Freakachoo Freakachoo 31 октября 2008 в 0:51

Очень странно - с LightBox2 ничерта не заработало :( -- заработало с Thickbox!
Но опять же странность есть - он тизеры выводит в галлерею с обработкой через imagecache -- а при нажатии открывает в Thickbox - но основную картину! исходную - не обработанную...
Это я так понимаю где-то настройка во Views должна быть чтобы он в ссылке ставил не обычную ссылку а через imagecache -- но так и не нашел сколько капался! а в тэмплэйтах Views там черт ногу сломит %)
может подскажете? уверен что решение там есть!

Аватар пользователя Freakachoo Freakachoo 31 октября 2008 в 3:01

или подскажете как в template.php (или где-то типа того) перехватить вывод этого View -- Field -- Grid -- Page (не знаю какие еще данные нужны) - какие там переменные использовать?
Попробовал поставить contemplate - он почему-то не устанавливается в друпале 6 :( - просто не видится в списке модулей!

Аватар пользователя evl-ntnt evl-ntnt 31 октября 2008 в 15:45

http://site.com/files/imagecache/MyPreset/files/image1.jpg

так не получается
пишет что файл запрашиваемый не существует
попробовал создать директории, которых не хватало
но результат тот же

чистые ссылки работают
картинки находятся в директории sites/default/files/
пробовал даже перестанавливать модуль

что может быть не так?
Где можно какую нибудь инструкцию найти?
С обычным imagecache не работал раньше
и с этим тем более

Может надо картинки через imagecache загружать на сервер? у него есть такая функция?

Аватар пользователя Freakachoo Freakachoo 31 октября 2008 в 18:38

Разобрался.

To: evl-ntnt

- да нужно создать папку с именем пресета - дать ей обязательно права 777 (пока не сделал - не заработало).
Папке site/default/files/imagecache я тоже дал права 777.

с LightBox так и не разобрался - работает через ThickBox. Правда чтобы он при открытии картинки в Thickbox тоже применял правило пришлось править через переопределение шаблонов. (в ссылке у картинки достаточно просто поменять путь - вместо sites/default/files/image.jpg ---- сделать sites/default/imagecache/PresetName/files/image.jpg и все работает правильно.

Аватар пользователя Freakachoo Freakachoo 31 октября 2008 в 18:47

Вот у меня другой вопрос ---
есть какая-то странность - при применении сначала overlay с прозрачностью 70% (например) (gif, png-8, png-24 пробовал)
а потом Scale ----
вся исходная картинка которая больше чем watermark (наложенный в Overlay) - становится синей. и получается вся картинка синяя кроме квадратика в сентре - там где водный знак... не пойму в чем дело...
Если же сначала Scale а потом Overlay -- накладывать водный знак то все ок - но только это не удобно потому что знак должен быть как для тисера так и для полного вида один и тот же...
Правда щас пришла в голову мысль просто сделать 2 файла картинок водного знака 2-х размеров... но... это как-то не элегантно :-D

Аватар пользователя vadbars@drupal.org vadbars@drupal.org 17 апреля 2009 в 13:48

Эхм, сам себе и отвечу. :) Нашел вот такой модуль http://drupal.org/node/231622#comment-1099594. Он добавляет в на страницу настройки /admin/settings/image/nodes возможность выбирать дополнительные пресеты imagecache.
Пока все работает...

Аватар пользователя likvid likvid 9 декабря 2010 в 2:04

Можно ли с помощью этого сделать изображения типа Демотиваторов. Если да подскажите как.

Аватар пользователя MDD MDD 6 сентября 2011 в 14:26

В настройках шаблона есть такой идентификатор как Namespace. Правильно ли я понимаю, что модуль ищет его наличие в пути к картинке и если она есть, выполняет определенные действия как задано самим шаблоном(накладывает водяные знаки, рамки и тп).

Т.е. что, все картинки, которые я хочу обработать надо держать в одноименной папке?

И еще пара вопросов:

Должен ли модуль перехватывать идентификатор из адресной строки если нода выводится по синониму пути?
Можно ли применить модуль только к определенному типу документов или только для определенных ролей?