使用 PHP GD 库将 webp 转换为 jpeg
Posted
技术标签:
【中文标题】使用 PHP GD 库将 webp 转换为 jpeg【英文标题】:Converting webp to jpeg in with PHP GD Library 【发布时间】:2020-04-24 13:25:00 【问题描述】:我在使用 php 的 GD 库创建从 webp 到 jpeg 的干净图像转码时遇到了一些麻烦。作为参考这里是使用 Google 演示的原始 jpeg 版本:https://developers.google.com/speed/webp/gallery(我从 jpeg 中包含了这个,因为我似乎无法将 webp 上传到 ***)
首先我尝试了这个基本程序:
$image = imagecreatefromwebp('4.webp');
imagejpeg($image, 'converted.jpg', 100);
这有点工作,但结果是这样的黄色背景:
我还尝试使用这段代码调整图像大小并首先绘制白色背景:
$image = imagecreatefromwebp('4.webp');
$width = imagesx($image);
$height = imagesy($image);
$new = imagecreatetruecolor($width, $height);
$background = imagecolorallocate($new, 255, 255, 255);
imagefilledrectangle($new, 0, 0, $width, $height, $background);
imagecopyresampled($new, $image, 0, 0, 0, 0, $width, $height, $width, $height);
imagejpeg($new, 'converted.jpg', 100);
这看起来更糟,并导致许多奇怪的工件:
在我完全放弃 GD 之前,任何人都可以提出建议以使其正常工作吗?首先,我正在寻找使用 GD 函数的解决方案。如果不可能,我愿意使用 ImageMagick 或其他库 - 但我想更深入地了解这里出了什么问题,以及是否可以在不更改工具的情况下正确完成。
【问题讨论】:
似乎发生了其他事情。当我运行您的基本例程时,它会完美地产生预期的图像。完全没有奇怪的颜色。 【参考方案1】:这可能是由 PHP 中较旧的 LibGD 实现的一个众所周知的错误引起的: http://git.php.net/?p=php-src.git;a=commit;h=a31fe58d8005ff47f8f6ad095dcd4fb3a2f0aae9
https://bugs.php.net/bug.php?id=70102
据我所知,它已在 PHP 7.0.0 中修复: https://www.php.net/ChangeLog-7.php (错误 70102)
第二个潜在问题是 libgd itselt。在 2.2.0 版本之前,他们使用 libvpx
,在 2.2.0 中切换到 libwebp
。
我已经用 PHP 5.6.40 和 LibGD 2.1.0 重现了这个错误。然后将 LibGD 升级到 2.2.4,一切正常。
我建议升级到较新的 ubuntu,但您也可以从 https://packages.ubuntu.com/search?keywords=libgd 手动获取所有需要的库,或者通过在 /etc/apt/sources.list
中增加系统版本,执行 apt-get update
和 apt-get upgrade libgd-dev libgd
(或 @ 987654330@ 或 libgd3
取决于您系统中的软件包名称 - 我是 Debian 用户,我不积极关注 Ubuntu 软件包)。它很可能会删除您的 php-gd
库,因此请务必重新安装它。
【讨论】:
啊,这就解释了为什么它对我来说工作得很好。我的 PHP 版本是最新的。很好的发现:) 谢谢 - 我正在使用 GD 2.1.1 和 PHP 7.0.33-0ubuntu0.16.04.7。你的理论是有道理的,但我很困惑为什么这些版本会影响我。我可以在早上有时间的时候尝试升级 PHP,但很高兴知道我应该定位哪个版本。 @billynoah 经过测试并在 PHP 7.2.24-0ubuntu0.18.04.1 上运行良好您可能也应该升级您的 Ubuntu @billynoah 检查我上面的编辑:您可能受到 LibGD 本身版本的影响。我已经用 2.1.0 复制了你的确切错误,并通过将 LibGD 升级到 2.2.4 来解决它。 非常感谢您的详细回答。我会信以为真地接受它,因为你听起来好像知道你在说什么 :-) 我需要小心,因为这是一个生产服务器,但我会尝试在另一台机器上完成升级以确保我能够在没有太多中断的情况下执行它。以上是关于使用 PHP GD 库将 webp 转换为 jpeg的主要内容,如果未能解决你的问题,请参考以下文章
如何使用干预图像laravel将webp图像转换为jpeg或png
如何在 Linux 上的 xampp 中的 php GD 库中启用 Webp 支持
php使用GD库将图片圆角 解决背景变黑问题 以及 图片丢失问题