在PHP中deinterlace png

时间:2015-12-14 16:43:34

标签: php gd

我尝试使用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)

1 个答案:

答案 0 :(得分:3)

你的第二个代码块可以正常工作,但是出现了一个小错误; imagealphablendingimagesavealpha传递了错误的资源,即$png而不是$img

更正后的代码:

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

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

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