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转换为“真彩色”图像并保持透明度.它确实似乎这样做了,但现在我看到的只是黑色背景上的蓝色.
我该怎么办?!
解决方法:
这对我很有用:
$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
您是否尝试将图像保存到文件并检查?
标签:php,transparency,png,gdlib 来源: https://codeday.me/bug/20190518/1129838.html