Forum Webscript.Ru

Программирование => PHP => Тема начата: lbpf от 02 Марта 2006, 16:33:58

Название: При использовании imagecopyresized теряется прозрачность файла png
Отправлено: lbpf от 02 Марта 2006, 16:33:58
Есть файл с логотипом - logo.png (он прозрачный). Есть изображение на которое его надо наложить.
Перед наложением в зависимости от размеров изображения - изменяется размер логотипа.
Но "новый" -  уменьшенный логотип теряет прозрачность.

Подскажите как это победить :)

 
add_copyright ("image.jpg", "logo.png");


function add_copyright ($image, $copy)
{
   $file_img = imagecreatefromjpeg($image);
   $file_logo= imagecreatefrompng($copy);
   $fwidth  = imagesx($file_img);
   $fheight = imagesy($file_img);
   $cwidth  = imagesx($file_logo);
   $cheight = imagesy($file_logo);
         $x = 0.5*$fwidth;
         $y = $x*$cheight/$cwidth;


   $new_logo = imagecreate($x, $y);
   imagecopyresized($new_logo, $file_logo, 0, 0, 0, 0, $x, $y, $cwidth, $cheight);
   $src_x = $fwidth - ($x + 10);
   $src_y = $fheight/2-$y;
   ImageAlphaBlending($file_img, true);
   ImageCopy($file_img,$new_logo,$src_x,$src_y,0,0,$x,$y);
   imagejpeg($file_img, "new.jpg", 80);
   imagedestroy($file_img);
   imagedestroy($file_logo);
   imagedestroy($new_logo);

}
Название: При использовании imagecopyresized теряется прозрачность файла png
Отправлено: CGVictor от 03 Марта 2006, 11:22:14
lbpf
Включи ImageAlphaBlending для $new_logo.

http://php.rinet.ru/manual/ru/function.imagealphablending.php
- почитай комментарии, есть примеры и solutions
Название: При использовании imagecopyresized теряется прозрачность файла png
Отправлено: lbpf от 03 Марта 2006, 12:30:11
Порылся я в инете и сделал такой способ наложения прозрачного копирайта PNG на JPEG изображение, с изменением размера копирайта в зависимости от размера JPEG изображения.


$image="image.jpg"; //файл на который накладываем копирайт
$copy="copy.png";  //копирайт PNG-24bit with Transparent
$new="new.jpg";    //файл изображения с копирайтом

add_copyright ($image, $copy, $new);

function add_copyright ($image, $copy, $new)
{
   $file_img = imagecreatefromjpeg($image);
   $file_logo= imagecreatefrompng($copy);
   $colorTransparent = imagecolortransparent($file_logo);

   $fwidth  = imagesx($file_img);
   $fheight = imagesy($file_img);
   $cwidth  = imagesx($file_logo);
   $cheight = imagesy($file_logo);
//вычисляем размеры нового копирайта в зависимости
//от размеров $image
         $x = 0.8*$fwidth;
         $y = $x*$cheight/$cwidth;

   $new_logo = imagecreatetruecolor($x, $y);

   imagefill($new_logo,0,0,$colorTransparent);
   imagecolortransparent($new_logo, $colorTransparent);
   imagecopyresized($new_logo, $file_logo, 0, 0, 0, 0, $x, $y, $cwidth, $cheight);
//координаты куда лепить копирайт на изображение
//в данном случае посередине (почти)
   $src_x = $fwidth/2 - $x/2;
   $src_y = $fheight/2 - $y/2-20;      
   ImageAlphaBlending($file_img, true);
   ImageCopy($file_img,$new_logo,$src_x,$src_y,0,0,$x,$y);
   imagejpeg($file_img, $new, 80);
   imagedestroy($file_img);
   imagedestroy($file_logo);
   imagedestroy($new_logo);

}