Я пытаюсь поместить JPEG позади PNG - где PNG имеет альфа-прозрачность.
Изображение на переднем плане здесь: http://peugeot208.srv.good -morning.no / images / marker-shadow.png
Изображение позади - изображение профиля в Facebook - обычноthis: https://graph.facebook.com/100000515495823/picture
Полученное изображение теряет прозрачность и вместо него становится черным: http://peugeot208.srv.good -morning.no / library / cache / test.png
Этокод, который я использую:
// combine image with shadow
$newCanvas = imagecreatetruecolor(90,135);
$shadow = imagecreatefrompng("marker-shadow.png");
//imagealphablending($newCanvas, false);
imagesavealpha($newCanvas, true);
imagecopy($newCanvas, $canvas, 20, 23, 0, 0, 50, 50);
imagecopy($newCanvas, $shadow, 0, 0, 0, 0, 90, 135);
imagepng($newCanvas, $tempfile, floor($quality * 0.09));
Если я включаю imagealphablending ($ newCanvas, false); результат будет правильным (с прозрачным отверстием в середине маркера), НО изображение позади исчезнет.
Можете ли вы пролить свет на это?:-)
Спасибо!
Редактировать: Нашел решение
Я немного поиграл и в итоге получил этот код - где источник не цвет создания, а изображение, созданное из шаблона - которыйэто прозрачный PNG.
Теперь все работает - результат правильно прозрачен.Я действительно не знаю почему.Есть идеи почему?
fbimage.php
// Create markerIcon
$src = $_REQUEST['fbid'];
$base_image = imagecreatefrompng("../images/marker-template.png");
$photo = imagecreatefromjpeg("https://graph.facebook.com/".$src."/picture");
$top_image = imagecreatefrompng("../images/marker-shadow.png");
imagesavealpha($base_image, true);
imagealphablending($base_image, true);
imagecopy($base_image, $photo, 20, 23, 0, 0, 50, 50);
imagecopy($base_image, $top_image, 0, 0, 0, 0, 90, 135);
imagepng($base_image, "./cache/".$src.".png");
?>
<img src="./cache/<?php echo $src ?>.png" />
Обновление: проверьте следующий код Результат можно найти здесь: http://peugeot208.srv.good -morning.no/images/marker.php Как видите, фон все еще черный.
// create base image
$base_image = imagecreatetruecolor(90,135);
$photo = imagecreatefromjpeg("marker-original.jpg");
$top_image = imagecreatefrompng("marker-shadow.png");
imagesavealpha($top_image, true);
imagealphablending($top_image, true);
imagesavealpha($base_image, true);
imagealphablending($base_image, true);
// merge images
imagecopy($base_image, $photo, 20, 23, 0, 0, 50, 50);
imagecopy($base_image, $top_image, 0, 0, 0, 0, 90, 135);
// return file
header('Content-Type: image/png');
imagepng($base_image);