Вопросик по наложению вотермарка в php
292 повідомлення
#14 років тому
Имеется такой код:
$res = imagecreate(158,158);
$img = imagecreatefromjpeg($arFields);
$logo = imagecreatefrompng($_SERVER."/images/watermark.png");
//Уменьшить фотку
imagecopyresized ($res,$img,
0,0,
0,0,
158,158,
imagesx($img),imagesy($img));
//Наложить лого
imagecopy ($res,$logo,60,110,0,0,100,51);
$trans = imagecolorat($res,0,0);
imagecolortransparent($res,$trans);
imagejpeg ($res,$arFields,"100");
Все работает, картинка накладывается, но, почему-то у пнгшки теряется прозрачность, как следствие - вместо прозрачного лога накладывается тупо белый прямоугольник. Почему так выходит?
292 повідомлення
#14 років тому
Проблема в том, что пнгшка 24бита, если 8 бит, то все хорошо, только вот 8-ка очень страшная выходит, как все таки налодить 24-бита?
1599 повідомлень
#14 років тому
Цитата ("bel0v"):накладывается тупо белый прямоугольник
а вы тупо на php.net не пытались сходить, мануалы почитать? Про альфа прозрачность ничо не слышали, не?
292 повідомлення
#14 років тому
А при чем тут это?проблема то в том, что пнг24 бита с прозрачностью при наложение становится непрозрачным. знакомые подсказали, что php не умеет работать с 24битными пнгшками работать...
или не так?
584 повідомлення
#14 років тому

Php не умеет, а вот gd2 без проблем

function AddWatermark( $src, $watermark, $dest, $x=0, $y=0, $quality=100, $toscreen=0) {
if (!file_exists($src) || !file_exists($watermark)) return false;
$srcSize = getimagesize($src);
$watermarkSize = getimagesize($watermark);
if (($srcSize === false)||($watermarkSize === false)) return false;
// Определяем исходный формат по MIME-информации, предоставленной
// функцией getimagesize, и выбираем соответствующую формату
// imagecreatefrom-функцию.
$srcFormat = strtolower(substr($srcSize, strpos($srcSize, '/')+1));
$srcIcFunc = "imagecreatefrom" . $srcFormat;
if (!function_exists($srcIcFunc)) die('Critical error: GD lib not found!');
$watermarkFormat = strtolower(substr($watermarkSize, strpos($watermarkSize, '/')+1));
$watermarkIcFunc = "imagecreatefrom" . $watermarkFormat;
if (!function_exists($watermarkIcFunc)) die('Critical error: GD lib not found!');
$isrc = $srcIcFunc($src);
$iwatermark = $watermarkIcFunc($watermark);
$idest = imagecreatetruecolor($srcSize, $srcSize);
imagecopyresampled($idest, $isrc, 0,0,0, 0, $srcSize, $srcSize, $srcSize, $srcSize);
$watermark_width = $watermarkSize;
$watermark_height = $watermarkSize;
$dest_x = $srcSize - $watermark_width - 10+$x; // правый
$dest_y = $srcSize - $watermark_height - 10+$y; // нижний угол изображения
imagecopy($idest, $iwatermark,$dest_x, $dest_y,0,0, $watermark_width, $watermark_height);
if ($toscreen) {
header('Content-Type: image/jpeg');
imagejpeg($idest);
imagedestroy($isrc);
imagedestroy($iwatermark);
imagedestroy($idest);
} else {
imagejpeg($idest, $dest, $quality);
imagedestroy($isrc);
imagedestroy($iwatermark);
imagedestroy($idest);
}
return true;
}