在PHP中去隔行png

我尝试使用php函数反交错png图片.

我在某处找到了导致该解决方案的提示:

$img = imagecreatefrompng("interlaced.png");

imageinterlace($img, 0);
$black = imagecolorallocate($img, 0,0,0);
imagecolortransparent($img, $black);
imagepng($img, "deinterlaced.png");

不幸的是,这不仅会保留透明区域,而且还会在图片使用纯黑色的地方扩展透明区域.

还有不使用imagecolorallocate去隔行的可能性吗?

我已经尝试过使用imagesavealpha了,但是没有用,或者我用错了:

$img = imagecreatefrompng("interlaced.png");

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

imageinterlace($img, 0);
imagepng($img, "deinterlaced.png");

这会使所有透明区域变为黑色(这可能是原因,为什么我在imagecolortransparent中选择了rgb0,0,0)

解决方法:

您的第二个代码块可以正常工作,但有一个小错误. imagealphablending和imagesavealpha传递了错误的资源,即$png而不是$img.

更正的代码:

$img = imagecreatefrompng("interlaced.png");

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

imageinterlace($img, 0);
imagepng($img, "deinterlaced.png");
上一篇:php-为什么此PNG图像在Chrome和Firefox上呈现的方式不同?


下一篇:PHP-imagecopy黑色背景