原本是折腾 Nginx-Lua 将 Jpg/png 转换 WebP 并自适应,无奈技术菜,看着别人教程,也没能把 Lua 折腾上。退一步,开了个 DigitalOcean VPS 直接安装 OpenResty(默认带 Lua),测试站,仍然不成功。实在无力,又不甘心,再换一个方法:PHP cwebp 转换图片为 WebP 格式,然后 Nginx 自适应。
方法来自挖站否,有几种方法,需要的不妨折腾试试。简单记录一下。
PHP 自动转换图片为 WebP 格式+Nginx 自适应
方法:初始使用 cwebp 批量将所有图片转换为 WebP,后续 crontab 定时增量转换图片。然后 Nginx 判断浏览器是否支持并输出 WebP。
安装 WebP
yum -y install libwebp-devel libwebp-tools
服务器批量转换 WebP
80 为压缩质量,一般 75 也可以。
find /ooxx.com/wp-content/uploads/ -name "*.jpg" -exec cwebp -q 80 {} -o {}.webp \;
find /ooxx.com/wp-content/uploads/ -name "*.png" -exec cwebp -q 80 {} -o {}.webp \;
find /ooxx.com/wp-content/uploads/ -name "*.gif" -exec gif2webp -q 80 {} -o {}.webp \;
crontab 定时增量转换 WebP 图片
只转换一天内修改过的图片:
#!/bin/sh
find /ooxx.com/wp-content/uploads/ -mtime -1 -name "*.jpg" -exec /usr/bin/cwebp -q 80 {} -o {}.webp \;
find /ooxx.com/wp-content/uploads/ -mtime -1 -name "*.png" -exec /usr/bin/cwebp -q 80 {} -o {}.webp \;
find /ooxx.com/wp-content/uploads/ -mtime -1 -name "*.gif" -exec /usr/bin/gif2webp -q 80 {} -o {}.webp \;
上面代码修改后,保存为 convert2webp.sh,上传到 root 目录下。
允许脚本执行:
chmod +x /root/convert2webp.sh
8小时执行一次转换:
01 */8 * * * /root/convert2webp.sh > /dev/null 2>&1 &
方法有点菜,不过总比手动好吧?囧……
Nginx 判定并自动加载 WebP 图片
nginx 配置文件 nginx.conf http {} 中加入以下代码:
map $http_accept $webp_suffix {
default "";
"~*webp" ".webp";
}
主机配置文件 ooxx.com.conf 中 server {} 段加入以下代码:
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
#expires 30d;
#access_log off;
add_header Cache-Control "public, no-transform";
add_header Vary "Accept-Encoding";
try_files $uri$webp_suffix $uri =404;
expires max;
}
重启一下 nginx——service nginx restart,Ctrl+F5 刷新一下带图片文章,就会加载 WebP 图片。
右键图片打开路径还是原本 .png 或者 .jpg 路径,右键另存为就是 .png.webp 或者 .jpg.webp 格式。
后记更新
有些图片压缩很明显,也有些图片体积反而增大不少,还是去掉算了。
参考资料
网站启用WebP格式图片-PHP和Nginx转化WebP格式和自适应浏览器
WebP挺好可惜苹果设备不支持,不然也想着上WebP,换句话说只要把苹果干掉,WebP就全平台支持了
@浮游 上吧,兼容一下就好。
@老杨 很讨厌适配的问题,真以后成了全平台的标准在上吧
@浮游 只要判断一下,凡是chrome的适配webp,其余保持原状。
@Yan 然而比较尴尬的是本文图片 WebP 格式比原本 png 图片还要大……
这个有用 放进收藏夹
@木瓜园 折腾 Lua 应该更好。
hmm,可以考虑我的方法。。
https://kn007.net/topics/add-convert-image-to-webp-support-for-nginx/
@kn007 参考文章那里就有你的文章啊,第一步 Lua 就没搞定,就放弃了……
@老杨 眼瞎了。如果编译的话,感觉还是蛮简单的。。
@kn007 我也觉得挺简单的,可是就是失败了……有空再试试。