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