[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Наложение водяного знака на gif изображение
Diakon
Добрый день!
Пишу скрипт, который накладывает на изображение водяной картинки.
Если изображение имеет формат jpeg, png - скрипт работает нормально, но если я пытаюсь наложить на gif картинку - получаю примерно такой вид.
Из картинки http://clip2net.com/s/3o1zOcV при наложении водяного знака получаю такой - http://clip2net.com/s/3o1zLdC
Т.е. водяной знак во-первых накладывается с ошибками, а во вторых затирается исходная (повторюсь, что в jpeg и png проблем нет).
Вот мой скрипт


private function addWatermark($img, $img_wm, $watermark_pos = 1){
$wm=imagecreatefrompng($img_wm);
$wmW=imagesx($wm);
$wmH=imagesy($wm);
// imagecreatetruecolor - создаёт новое изображение true color
$image=imagecreatetruecolor($wmW, $wmH);

// выясняем расширение изображения на которое будем накладывать водяной знак
if(preg_match("/.gif/i",$img)):
$image=imagecreatefromgif($img);
elseif(preg_match("/.jpeg/i",$img) or preg_match("/.jpg/i",$img)):
$image=imagecreatefromjpeg($img);
elseif(preg_match("/.png/i",$img)):
$image=imagecreatefrompng($img);
else:
die("Ошибка! Неизвестное расширение изображения");
endif;
// узнаем размер изображения
$size=getimagesize($img);

//проверяем, что водная марка не больше изображения на которое накладываем
if ( $size[1]>$wmH || $size[0]>$wmW ){

// указываем координаты, где будет располагаться водяной знак
/*
* $size[0] - ширина изображения
* $size[1] - высота изображения
*/

$cx=null;
$cy=null;

//Позиции водной марки
switch ($watermark_pos) {
case 1: //Замостить
for ($y_i=0; $y_i<$size[1]; $y_i = $y_i+$wmH){
for ($x_i=0; $x_i<$size[0]; $x_i = $x_i+$wmW){
imagecopyresampled ($image, $wm, $x_i, $y_i, 0, 0, $wmW, $wmH, $wmW, $wmH);
}
}

break;
case 2: //Изображение в нижнем левом углу
$cx=10;
$cy=$size[1]-$wmH;
break;
case 3: //Изображение внизу по центру
$cx=($size[0]/2)-($wmW/2);
$cy=$size[1]-$wmH;
break;
case 4: //Изображение в центре
$cx=($size[0]/2)-($wmW/2);
$cy=($size[1]/2)-($wmH/2);
break;
case 5: //Изображение в левом верхнем углу
$cx=10;
$cy=10;
break;
case 6: //Изображение в нижнем правом углу
$cx=$size[0]-$wmW;
$cy=$size[1]-$wmH;
break;
}

/* imagecopyresampled - копирует и изменяет размеры части изображения
* с пересэмплированием
*/

if (!empty($cx) && !empty($cy)){
imagecopyresampled ($image, $wm, $cx, $cy, 0, 0, $wmW, $wmH, $wmW, $wmH);
};

/* imagejpeg - создаёт JPEG-файл filename из изображения image
* третий параметр - качество нового изображение
* параметр является необязательным и имеет диапазон значений
* от 0 (наихудшее качество, наименьший файл)
* до 100 (наилучшее качество, наибольший файл)
* По умолчанию используется значение по умолчанию IJG quality (около 75)
*/
//imagejpeg($image,$img,90);

if(preg_match("/.gif/i",$img)){
imagegif($image,$img,90);
}
elseif(preg_match("/.jpeg/i",$img) or preg_match("/.jpg/i",$img)){
imagejpeg($image,$img,90);
}
elseif(preg_match("/.png/i",$img)) {
imagepng($image,$img,9);
}

// imagedestroy - освобождает память
imagedestroy($image);

imagedestroy($wm);

// на всякий случай
unset($image,$img);

}

}





Заранее спасибо всем, кто подскажет!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.