Правильное добавление Watermark. PHP. Прозрачный png.
Столкнулся с проблемой - необходимо стало добавить возможность добавления прозрачной метки-изображения на загружаемые картинки. Подобные вещи называются watermark. Искал в яндексе, нашел недописанные или слишком навороченные методы, которые не удалось быстро встроить, или, что еще хуже, неполноценно работали, сохраняя результат в png без прозрачности.Пришлось сесть и самому выяснить некоторые детали, создать свой метод. Итак, Исходный код моего метода:
PHP, добавление png watermark к картинке | |
1 |
function AddWatermark($img_file, $filetype, $watermark = 'watermark.png'){ $offset = 5;//отступ от правого нижнего края $image = GetImageSize($img_file); $xImg = $image[0]; $yImg = $image[1]; switch ($image[2]) { case 1: $img=imagecreatefromgif($img_file); break; case 2: $img=imagecreatefromjpeg($img_file); break; case 3: $img=imagecreatefrompng($img_file); break; } $r = imagecreatefrompng($watermark); $x = imagesx($r); $y = imagesy($r); $xDest = $xImg - ($x + $offset); $yDest = $yImg - ($y + $offset); imageAlphaBlending($img,1); imageAlphaBlending($r,1); imagesavealpha($img,1); imagesavealpha($r,1); imagecopyresampled($img,$r,$xDest,$yDest,0,0,$x,$y,$x,$y); switch ($filetype) { case "jpg": imagejpeg($img,$img_file,100); break; case "jpeg": imagejpeg($img,$img_file,100); break; case "gif": imagegif($img,$img_file); break; case "png": imagepng($img,$img_file); break; } imagedestroy($r); imagedestroy($img); } |
Ошибкой большинства других методов в отсутствии вызова imagesavealpha($img,1) что и рушило правильное сохранение изображения. Встроил метод в 8cms. Успехов!
Дата записи: 05.03.2010 23:07
Предыдущая тема: Как правильно делать Feedburner