测试通过7.3.0 -- 可用。
免责声明:可能仅适用于更高或某些PHP版本。
仅在5.6.15(未能正常工作,黑色背景)和7.3.0(可用,透明背景)上进行了测试。
以下是代码:
$pngimg = imagecreatefrompng($file);
$w = imagesx($pngimg);
$h = imagesy($pngimg);;
$im = imagecreatetruecolor ($w, $h);
imageAlphaBlending($im, false);
imageSaveAlpha($im, true);
$trans = imagecolorallocatealpha($im, 0, 0, 0, 127);
imagefilledrectangle($im, 0, 0, $w - 1, $h - 1, $trans);
imagecopy($im, $pngimg, 0, 0, 0, 0, $w, $h);
imagewebp($im, str_replace('png', 'webp', $file));
imagedestroy($im);
编辑1。*** 证明
PHP GD库依赖于libgd库。
链接:
https://github.com/libgd/libgd
有关saves的相关代码(文件:gd_webp.c),摘录显示Alpha通道存在时的尊重:
c = im->tpixels[y][x];
a = gdTrueColorGetAlpha(c);
if (a == 127) {
a = 0;
} else {
a = 255 - ((a << 1) + (a >> 6));
}
*(p++) = gdTrueColorGetRed(c);
*(p++) = gdTrueColorGetGreen(c);
*(p++) = gdTrueColorGetBlue(c);
*(p++) = a;
关于static int _gdImageWebpCtx (gdImagePtr im, gdIOCtx * outfile, int quality)
的问题,我呈现的PHP代码依赖于GD库确实尊重alpha,并且因此有效,如果在您正在使用的较早版本之后的版本中进行测试,则可以工作,特别是我在7.3.0中进行了测试。