我尝试使用 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 的原因)
你的第二个代码块可以正常工作,但有一个小错误;imagealphablending
并imagesavealpha
传递了不正确的资源,即,$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)