gpt4 book ai didi

php - 如何将png文件转换为webp文件

转载 作者:行者123 更新时间:2023-12-03 22:04:49 28 4
gpt4 key购买 nike

我需要转换图像 (png) (webp) 文件。

上传后 png 文件, webp 图像已生成,但 webp 文件没有复制 的透明度png 文件,而是创建黑色背景。

这是我的 php 代码:

$type = wp_check_filetype($file, null);
$ext = $type['ext'];
if ($ext === 'png') {
$im = imagecreatefrompng($file);
imagepalettetotruecolor($im);
$webp = imagewebp($im, str_replace('png', 'webp', $file));
}
imagedestroy($im);

The version of PHP is 5.6

最佳答案

在 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 canvas

imagecopy($im, $pngimg, 0, 0, 0, 0, $w, $h);

// lastly, save canvas as a webp

imagewebp($im, str_replace('png', 'webp', $file));

// done

imagedestroy($im);


编辑 1. *** 证明

PHP GD 库依赖于 libgd 库。

关联:

https://github.com/libgd/libgd

保存的相关代码(文件:gd_webp.c),摘录显示对 Alpha channel 的尊重:
            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 代码依赖于这样一个事实,即 alpha 在 GD 库中确实受到尊重,因此 作品 如果在比您使用的更高版本的 PHP 中进行测试,特别是我在 7.3.0 中进行了测试,但可能会在您的版本之后的早期版本中使用。

关于php - 如何将png文件转换为webp文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57757439/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com