php 中的去隔行 png

ale*_*dre 5 php gd

我尝试使用 php 函数对 png 图片进行去隔行处理。

我在某个地方找到了导致此解决方案的提示:

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

imageinterlace($img, 0);
$black = imagecolorallocate($img, 0,0,0);
imagecolortransparent($img, $black);
imagepng($img, "deinterlaced.png");
Run Code Online (Sandbox Code Playgroud)

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

是否有另一种可能在不使用 imagecolorallocate 的情况下去隔行?

我已经尝试过使用imagesavealpha,但它不起作用,或者我用错了:

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

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

imageinterlace($img, 0);
imagepng($img, "deinterlaced.png");
Run Code Online (Sandbox Code Playgroud)

这会导致所有透明区域都变成黑色(这可能就是我当时在 imagecolortransparent 中选择 rgb0,0,0 的原因)

tim*_*ton 4

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

更正的代码:

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

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

imageinterlace($img, 0);
imagepng($img, "deinterlaced.png");
Run Code Online (Sandbox Code Playgroud)