GDLib + прозрачный гиф
проблема заключается в том, что при уменьшении прозрачного гифа - его прозрачность теряется. Можно как-то этого избежать?
В прозрачных гифах прозрачным определяется один из основных цветов. При масштабировании видать, это теряется. Значит нужно восстановить этот "прозрачный" цвет
Цитата:
Originally posted by r000n_m
В прозрачных гифах прозрачным определяется один из основных цветов. При масштабировании видать, это теряется. Значит нужно восстановить этот "прозрачный" цвет
В прозрачных гифах прозрачным определяется один из основных цветов. При масштабировании видать, это теряется. Значит нужно восстановить этот "прозрачный" цвет
а как это сделать?. и непонятно, что значит "один из основных цветов". Ведь я когда создаю этот гиф в фотошопе - я выбираю "None" для цвета
Путем сохранения с прозрачностью и без нее с последующим анализом полученного в hex виде обнаружил, что байт по смещению 310h содержит значение 0/1 - нет/есть прозрачность, а байт по смещению 313h - значение прозрачности. Пробовал на трех файлах
Цитата:
Originally posted by r000n_m
Путем сохранения с прозрачностью и без нее с последующим анализом полученного в hex виде обнаружил, что байт по смещению 310h содержит значение 0/1 - нет/есть прозрачность, а байт по смещению 313h - значение прозрачности. Пробовал на трех файлах
Путем сохранения с прозрачностью и без нее с последующим анализом полученного в hex виде обнаружил, что байт по смещению 310h содержит значение 0/1 - нет/есть прозрачность, а байт по смещению 313h - значение прозрачности. Пробовал на трех файлах
а как все это дело проделать программно на GD Lib?
По новой сделать прозрачной
imagecolortransparent
Цитата:
Originally posted by r000n_m
Хотя зачем огород городить?
По новой сделать прозрачной
imagecolortransparent
Хотя зачем огород городить?
По новой сделать прозрачной
imagecolortransparent
немного непонял
у меня вот такой код:
Код:
$this->get_image_size($watermark, $watermark_w, $watermark_h, $err);
$watermark_image = $this->create_image_from_file($watermark);
$img=@imagecreatefromgif($source);
$width=imagesx($img); $height=imagesy($img);
if ($width>$height) { $n_height=$height*($watermark_w/$width); $n_width=$watermark_w; }
else { $n_width=$width*($watermark_h/$height); $n_height=$watermark_h; }
$x=0;$y=0;
if ($n_width<$watermark_w) $x=round(($watermark_w-$n_width)/2);
if ($n_height<$watermark_h) $y=round(($watermark_h-$n_height)/2);
$thumb=imagecreatetruecolor($n_width,$n_height);
if (!($result=@imagecopyresampled($thumb,$img,0,0,0,0,$n_width,$n_height,$width,$height)))
$result=imagecopyresized($thumb,$img,0,0,0,0,$n_width,$n_height,$width,$height);
$source_img = $thumb;
imageCopyMerge($watermark_image, $source_img, $offset_x, $offset_y, 0, 0, $n_width,$n_height, $pct);
$watermark_image = $this->create_image_from_file($watermark);
$img=@imagecreatefromgif($source);
$width=imagesx($img); $height=imagesy($img);
if ($width>$height) { $n_height=$height*($watermark_w/$width); $n_width=$watermark_w; }
else { $n_width=$width*($watermark_h/$height); $n_height=$watermark_h; }
$x=0;$y=0;
if ($n_width<$watermark_w) $x=round(($watermark_w-$n_width)/2);
if ($n_height<$watermark_h) $y=round(($watermark_h-$n_height)/2);
$thumb=imagecreatetruecolor($n_width,$n_height);
if (!($result=@imagecopyresampled($thumb,$img,0,0,0,0,$n_width,$n_height,$width,$height)))
$result=imagecopyresized($thumb,$img,0,0,0,0,$n_width,$n_height,$width,$height);
$source_img = $thumb;
imageCopyMerge($watermark_image, $source_img, $offset_x, $offset_y, 0, 0, $n_width,$n_height, $pct);
watermark_img - это мой прозрачный ватермарк.
И я немного непойму, куда мне надо вставить imagecolortransparent?
После всех преобразований
Цитата:
Originally posted by r000n_m
После всех преобразований
После всех преобразований
неполучается =(
может подскажете, куда мне надо код вставить?
Код:
...
imageCopyMerge($watermark_image, $source_img, $offset_x, $offset_y, 0, 0, $n_width,$n_height, $pct);
$trans_color = imagecolorallocate($source_img, 255, 0, 0);
imagecolortransparent($source_img, $trans_color);
imageCopyMerge($watermark_image, $source_img, $offset_x, $offset_y, 0, 0, $n_width,$n_height, $pct);
$trans_color = imagecolorallocate($source_img, 255, 0, 0);
imagecolortransparent($source_img, $trans_color);
Подробности на http://ru.php.net/imagecolortransparent ;-)
а не проще-ли использовать для "ватермарка" Png-24?