php如何生成webp图片?如何进行webp图片格式转化?
发布于 作者:苏南大叔 来源:程序如此灵动~webp
是近几年最新流行的图片格式,目前百度图片已经全面使用webp
格式。所以,这里苏南大叔也进行了一些尝试,看看webp
是否适合替换目前的博客png
图片呢?php
如何生成webp
格式图片呢?如何把现有的png
图片转换成webp
格式呢?
大家好,这里是苏南大叔的程序如此灵动博客,这里记录苏南大叔和计算机代码的故事。本文记录使用php
生成webp
格式图片的经验。本文测试环境:centos@7.7.1908
,php@7.4.28
,gd@2.1.0
。
判断系统环境
本文的测试环境是:宝塔面板自带的php@7.4.28
。phpinfo()
显示如下:
如果您的没有显示webp enabled
之类的字样的话,请重新编译php
或者gd.so
文件。
php73
及以前版本的编译参考选项是--with-webp-dir
php74
的编译参考选项是--with-webp
最简单代码
直接显示webp
图片:
$img_path = dirname(__FILE__).DIRECTORY_SEPARATOR."png.png";
$im = @imagecreatefrompng($img_path);
header('Content-type:image/webp');
imagewebp($im, null, 100);
imagedestroy($im);
进行格式转化,并保存文件:
$img_path = dirname(__FILE__).DIRECTORY_SEPARATOR."png.png";
$img_path2 = dirname(__FILE__).DIRECTORY_SEPARATOR."test.webp";
$im = imagecreatefrompng($img_path);
imagewebp($im,$img_path2, 100);
imagedestroy($im);
这两个代码中,可见区别仅仅在于imagewebp
的第二个参数,
- 当为
null
的时候,搭配header
就可以显示一个webp
图片。 - 当为具体路径的时候,就可以保存一个图片。
其中的图片质量,苏南大叔设置的是100
。但是,最终无论是图片质量还是显示效果,都不能表示满意。所以,博客还是保持目前的png
格式。对比本代码中生成的webp
文件,本博客中使用pngquant
处理过的png
文件,完胜。
另外,如果您的原图是jpg
等其它格式的话,请使用对应的imagecreatefrom
函数。参考文章:
报错一,扩展支持
您可能会遇到下面的报错信息:
Fatal error: Uncaught Error: Call to undefined function imagewebp()
这个错误是php
的gd
库的问题,没有开启webp
支持。您可以选择重新编译php
或者gd.so
,下面是参考文章:
- https://newsn.net/say/pngquant-libpng.html
- https://newsn.net/say/mac-php-gd-freetype.html
- https://newsn.net/say/phpsrc-compile-win.html
报错二,格式问题
苏南大叔的博客图片里面是png
格式。流程上一般都是使用photoshop
生成png
图片,然后在代码中再调用pngquant
生成图片。参考文章:
那么,使用原始的photoshop
导出的png
图片时,上述最简代码是可以正常运转的。但是,使用被代码处理过png
图片作为输入图片的时候,会引发两个奇怪的错误。
Warning: imagecreatefrompng(): gd-png: libpng warning: Interlace handling should be turned on when using png_read_image
Fatal error: Paletter image not supported by webp
这个错误,据说是因为开启了交错选项,所以,使用了@
符号,抑制错误输出。然后增加了Paletter
相关代码:
$im = @imagecreatefrompng($img_path);
imagepalettetotruecolor($im);
imagealphablending($im, true);
imagesavealpha($im, true);
相关文章
- https://newsn.net/say/pngquant-libpng.html
- https://newsn.net/say/mac-php-gd-freetype.html
- https://newsn.net/say/phpsrc-compile-win.html
综述
php
一般都是利用gd.so
扩展对图片进行处理的,如果不能处理相关错误,请先检查相关扩展设置。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。