PHP + GD: imagecopymerge не сохраняет PNG-прозрачные пленки

У меня есть два файла PNG: «red.png» и «blue.png»; они оба в основном прозрачны, но в разных местах есть несколько пикселей красных или синих пятен.

Я хочу создать скрипт PHP, который объединяет два; он должен быть таким простым, как что-то вроде:

$original = getPNG('red.png'); $overlay = getPNG('blue.png'); imagecopymerge($original, $overlay, 0,0, 0,0, imagesx($original), imagesy($original), 100); header('Content-Type: image/png'); imagepng($original); 

Когда я запускаю этот скрипт, все, что я получаю, это синие точки – с потерянной прозрачностью. Я видел, что должен добавить их:

 imagealphablending($original, false); imagesavealpha($original, true); 

(как на оригинале, так и на наложении?) И это ничем не помогает.

Я видел несколько обходных путей на PHP.net, что-то вроде:

 $throwAway = imagecreatefrompng($filename); imagealphablending($throwAway, false); imagesavealpha($throwAway, true); $dstImage = imagecreatetruecolor(imagesx($throwAway), imagesy($throwAway)); imagecopyresampled($dstImage, $throwAway,0,0,0,0, imagesx($throwAway), imagesy($throwAway), imagesx($throwAway), imagesy($throwAway)); 

, который должен преобразовать PNG в изображение «truecolor» и сохранить прозрачность. Кажется, это так, но теперь все, что я вижу, синее на черном фоне.

Что я делаю?!

Это отлично работает для меня:

 $img1 = imagecreatefrompng('red.png'); $img2 = imagecreatefrompng('blue.png'); $x1 = imagesx($img1); $y1 = imagesy($img1); $x2 = imagesx($img2); $y2 = imagesy($img2); imagecopyresampled( $img1, $img2, 0, 0, 0, 0, $x1, $y1, $x2, $y2); imagepng($img1, 'merged.png', 0); 

Версия PHP 5.3.2
Версия GD 2.0
Версия LibPNG 1.2.42

Вы пытались сохранить изображение в файл и проверить это?