手掌心
在 7.3.0 上测试 - 有效。免责声明:可能仅适用于更高版本或某些 PHP 版本。仅在 5.6.15(无效,黑色背景)和 7.3.0(有效,透明背景)上测试。这是代码:// get png in question$pngimg = imagecreatefrompng($file);// get dimens of image$w = imagesx($pngimg);$h = imagesy($pngimg);;// create a canvas$im = imagecreatetruecolor ($w, $h);imageAlphaBlending($im, false);imageSaveAlpha($im, true);// By default, the canvas is black, so make it transparent$trans = imagecolorallocatealpha($im, 0, 0, 0, 127);imagefilledrectangle($im, 0, 0, $w - 1, $h - 1, $trans);// copy png to canvasimagecopy($im, $pngimg, 0, 0, 0, 0, $w, $h);// lastly, save canvas as a webpimagewebp($im, str_replace('png', 'webp', $file));// doneimagedestroy($im); 编辑 1. *** 证明PHP GD 库依赖于 libgd 库。关联:https://github.com/libgd/libgd保存的相关代码(文件: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库,因此确实推崇的作品,如果在以后的PHP版本测试不是您正在使用,特别是在我测试了7.3.0,但您的版本后,在早期的版本可能工作。
qq_花开花谢_0
您可能必须启用 Alpha 通道并保存它。也许试试这个:$ext = $type['ext'];if ($ext === 'jpg' || $ext === 'jpeg') { $im = imagecreatefromjpeg($file); $webp = imagewebp($im, str_replace($ext, 'webp', $file), 70);} elseif ($ext === 'png') { $im = imagecreatefrompng($file); imagepalettetotruecolor($im); imageAlphaBlending($im, true); // alpha channel imageSaveAlpha($im, true); // save alpha setting $webp = imagewebp($file, str_replace('png', 'webp', $file));}imagedestroy($im);PHP的版本是5.6