Собственно, совсем недавно была завершена некоторая работа - она была связана с программированием конвейера сборки большого числа изображений из отдельных картинок "конструктора". Для этого, само собой, пришлось накладывать полупрозрачные слои. При теоретических изысканиях данного вопроса - я обнаружил интересную особенность - при запросе "Водяной знак на PHP + GD" в сети нет нормальной, практической информации по этому поводу. Вас сначала погружают в дебри теоретических изысканий, вместо того, чтобы дать самодокументированный код. Я решил пойти иначе. Внизу - функция обеспечивающая наложение водяного знака на изображение. Из недостатков - то, что она работает только с изображениями формата PNG. Впрочем, программисту это исправить не проблема.
function watermark($_source_path, $_watermark_path, $_file='')
{
/* Проверка - подключена ли библиотека GD - если её нет, вам необходимо либо самому подключить эту библиотеку
* (В файле php.ini, секция extensions, необходимо прописать либо раскомментировать строку:
* extension=php_gd2.dll - в windows. */
if (!extension_loaded('gd'))
{
return false;
}
if (!empty($_source_path) && !empty($_watermark_path))
{
$i_source = imagecreatefrompng($_source_path);
$i_watermark = imagecreatefrompng($_watermark_path);
$result = imagecreatetruecolor(imagesx($i_source), imagesy($i_source));
/* Координаты 0,0,0,0 - задают координаты соединения изображений.
* Поигравшись с ними можно изменить положение водяного знака (да и исходного изображения)
*/
imagecopy($result, $i_source, 0, 0, 0, 0, imagesx($i_source), imagesy($i_source));
imagecopy($result, $i_watermark, 0, 0, 0, 0, imagesx($i_watermark), imagesy($i_watermark));
imagedestroy($i_source);
imagedestroy($i_watermark);
if (!empty($_file))
{
imagepng($result, $_file, 4);
}
else
{
return $result;
}
}
}