web技术

如何用PHP将webp转换成jpg格式,使用ImageMagick实现

2023-07-19 12:01 作者:不是企鹅原创

如何用PHP将 webp 格式的图片文件转换为 jpg 格式?除了使用 libwebp 库,用PHP执行命令行实现简单的转换之外,还可以使用更强大的 ImageMagick 软件,通过PHP的 imagick 扩展对图片进行处理。基于 imagick 扩展编写的PHP图片处理程序比调用命令行的写法更加合理和健壮。本文将介绍 ImageMagick 、imagick 的安装、PHP代码的编写以及常见的问题。

本文使用的操作系统是CentOS 7.9 64位,PHP版本是5.6。

第一步:安装 libwebp 库

因为 ImageMagick 也是要用到 libwebp 库的。安装命令如下:

yum -y install libwebp
yum -y install libwebp-devel
yum -y install libwebp-tools

安装好之后执行 cwebp -version 命令查看版本号,查看成功即表示安装成功。

请注意,尽量使用 yum 方式安装 libwebp ,否则后面 imagick 将会遇到无法填补的坑,到时还得重装 libwebp 。

如果你实在不想使用 yum 方式,或者你的系统无法使用 yum 方式,那么可以参考我另一篇文件使用另外两种方式对 libwebp 进行安装:

《将webp转换成jpg的PHP程序,使用libwebp扩展实现》 http://www.sinsiu.com/a/59.html

第二步:安装 jpeg 库

wget https://download.imagemagick.org/archive/delegates/jpegsrc.v9b.tar.gz
tar -xvzf jpegsrc.v9b.tar.gz
cd jpeg-9b
./configure
make libdir=/usr/lib64
make libdir=/usr/lib64 install

请注意,若最后两步直接执行 make && make install 命令,则后面安装 ImageMagick 时会出现如下错误:

magick/.libs/libMagickCore-6.Q16.so: undefined reference to 'jpeg_default_qtables'
collect2: error: ld returned 1 exit status

第三步:安装 ImageMagick 软件

wget https://download.imagemagick.org/archive/ImageMagick-6.9.12-93.tar.gz
tar -xvzf ImageMagick-6.9.12-93.tar.gz
cd ImageMagick-6.9.12-93
./configure
make
make install

安装没有报错。但是执行查询版本命令:

convert -version

出现如下错误:

convert: error while loading shared libraries: libMagickCore-6.Q16.so.7: cannot open shared object file: No such file or directory

这个不难解决,只需要将对应的 so 文件从 /usr/local/lib/ 目录链接到 /usr/lib/ 目录即可,命令如下:

ln -s /usr/local/lib/libMagickCore-6.Q16.so.7 /usr/lib/libMagickCore-6.Q16.so.7

然后用 vim 打开 /etc/ld.so.conf 文件:

vim /etc/ld.so.conf

如果没有 /usr/local/lib 则追加写入 /usr/local/lib,然后退出 vim 并执行:

ldconfig

再次执行 convert -version 查看版本,这次应该没有问题了。

可以上传一张 webp 图片进行转换测试:

convert test.webp out2.jpg

如果前面没有安装 libwebp 库则会出错:

convert: delegate failed ''dwebp' -pam '%i' -o '%o'' @ error/delegate.c/InvokeDelegate/1994.

找不到 webp 格式的解码器 dwebp ,所以 ImageMagick 也是要用到 libwebp 的。

第四步:安装PHP的 imagick 扩展

命令如下:

wget http://pecl.php.net/get/imagick-3.4.3.tgz
tar -xvzf imagick-3.4.3.tgz
cd imagick-3.4.3
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-imagick=/usr/local
make
make test
make install

请注意,在执行了 make 之后会得到提示:

Don't forget to run 'make test'.

按提示执行 make test 之后得到报错:

The test-suite requires that proc_open() is available.
Please check if you disabled it in php.ini.

这时需要修改 php.ini 文件开启 proc_open() ,建议顺便把 proc_get_status()、exec()、shell_exec() 也开启了,因为不开启的话虽然 make test 不报错,但会产生大量警告。修改后执行 make install 。

然后还要再次修改 php.ini ,增加:

extension=imagick.so

然后重启Web服务器。

测试:

php -r 'phpinfo();' | grep imagick
#或者:
php --ri imagick

至此,完成了 imagick 安装,可以使用 PHP 程序进行 webp 到 jpg 的格式转换了。

PHP 程序:

header('Content-type: image/jpeg');

$input = 'test.webp';
$output = 'test.jpg';

$image = new Imagick();
$image->readImage($input);

$image->setImageFormat('jpg');
$image->writeImage($output);
$image->destroy();

echo file_get_contents($output);

实现效果如下:

如果 libwebp 库不是通过 yum 方式安装,则 PHP 程序可能出现如下错误:

unable to open file '/tmp/magick-DoNM6g4BFSJ76nTZweymAMe_6Z39xYac': No such file or directory @ error/constitute.c/ReadImage/621

对于这个错误,最好是使用 yum 的方式重新安装 libwebp 、libwebp-devel 和 libwebp-tools,目前找不到更好的解决方案。

推荐文章
在PHP中,我们通常使用第三方库或扩展来实现图片格式转换,但有时出于某些原...
网上有不少使用PHP将WebP格式转换为JPG格式的方法,什么libwebp库、ImageMagic...
我们通常使用使用GD库或libwebp库将webp格式转换为jpg格式,但也可以使用一种...
在某些情况下我们可能需要将webp格式的图片转换成jpg格式,这样可以确保图片...
在编写PHP程序来执行webp格式转换成jpg格式的任务时,一种方法是使用PHP的图像...
推荐专题
如何自己建网站?建网站难不难?其实建网站说难不难,说容易也并不容易,难...
本专题精心收集整理了多种HTML+CSS+JS轮播图实现方案,带详细代码和讲解,正...