Проблемы с прозрачным наложением изображений в PHP - PullRequest
2 голосов
/ 05 января 2010

Я просто не могу сказать, почему это:

<?php

     $image = imagecreatefromjpeg($_GET['u']);
     imagealphablending($image, true);
     imagesavealpha($image,true);
     $overlay = imagecreatefrompng("overlay.png");
     imagealphablending($overlay, true);
     imagesavealpha($overlay,true);
     $finalImage = imagecreate(85,85);
     imagealphablending($finalImage, true);
     imagesavealpha($finalImage,true);

     $trans = imagecolorallocate($finalImage,255,0,0);
     imagecolortransparent($finalImage,$trans);
     imagefill($finalImage, 0, 0, $trans);

     imagecopy($finalImage, $image, 5, 5, 0, 0, 75, 75);
     imagecopy($finalImage, $overlay, 0, 0, 0, 0, 85, 85);
     imageDestroy($image);
     imageDestroy($overlay);


     // Content type
     header('Content-type: image/png');
     imagepng($finalImage);
     imagedestroy($finalImage);

?>

Производит это:

альтернативный текст http://alanjack.co.uk/travel/0rotatedImage.php%20(1).png

При выполнении фотокопии тот или иной результат дает хорошие результаты:

         imagecopy($finalImage, $image, 5, 5, 0, 0, 75, 75);
     //imagecopy($finalImage, $overlay, 0, 0, 0, 0, 85, 85);
     //ImageDestroy($image);
     //ImageDestroy($overlay);

дает:

альтернативный текст http://alanjack.co.uk/travel/1rotatedImage.php%20(1).png

и

         //imagecopy($finalImage, $image, 5, 5, 0, 0, 75, 75);
     imagecopy($finalImage, $overlay, 0, 0, 0, 0, 85, 85);
     //ImageDestroy($image);
     //ImageDestroy($overlay);

дает:

альтернативный текст http://alanjack.co.uk/travel/2rotatedImage.php%20(1).png

Может ли это быть какая-то несоответствие палитры или что-то - что-то связанное с тем, что один из них является PNG, а другой JPEG?

Грррррррр ... Алан злой ... АЛАН ХОЧЕТ СМЕШАТЬ !!!

Ответы [ 2 ]

2 голосов
/ 05 января 2010

Попробуйте вместо этого код:

<?php

$image = imagecreatefromjpeg($_GET['u']);
imagesavealpha($image, true);
imagealphablending($image, true);

$overlay = imagecreatefrompng("overlay.png");
imagesavealpha($overlay, true);
imagealphablending($overlay, true);

$finalImage = imagecreatetruecolor(85,85);
imagefill($finalImage, 0, 0, IMG_COLOR_TRANSPARENT);
imagesavealpha($finalImage, true);
imagealphablending($finalImage, true);

/*
$trans = imagecolorallocatealpha($finalImage, 255, 0, 0, 127);
imagecolortransparent($finalImage, $trans);
imagefill($finalImage, 0, 0, $trans);
*/

imagecopy($finalImage, $image, 5, 5, 0, 0, 75, 75);
imagecopy($finalImage, $overlay, 0, 0, 0, 0, 85, 85);
//imageDestroy($image);
//imageDestroy($overlay);

// Content type
header('Content-type: image/png');
imagepng($finalImage);
//imagedestroy($finalImage);

?>

Решает ли это вашу проблему?

0 голосов
/ 18 января 2010

Серый прямоугольник исчез, когда я изменил imagecreate () на imagecreatetruecolor (), поэтому я думаю, что это проблема палитры в конце концов!

Спасибо, ребята.

...