首先,文章标题是个伪命题,因为并不能直接转换,而需要用到Aliyun的OSS和WordPress插件OSS Upload。
其次,“自动压缩”也不全对,因为在不支持WebP的浏览器上仍然能以JPG等格式正常浏览。
百度搜索“WordPress自动压缩为WebP”可以有一堆解决方案,然而本方法相对最简单,在Chrome浏览器能加快20-30%的加载速度且完美支持多种非Chrome浏览器,如果不想用了在插件里去掉勾选即可恢复,故值得推荐。
步骤:
1、开通Aliyun OSS。
2、下载最新版OSS Upload 4.4。
3、激活后勾选自动压缩选项。
4、在Aliyun OSS中,设置一个额外样式,例如watermark_webp。
5、在watermark_webp的设置中,将“格式转换”设为webp。
如下图,用Chrome浏览则下载为WebP,用Safari或IE打开则下载为JPG。
知识库:《WebP相对 PNG、JPG有什么优势?》
2020/4/29
WebP效果已取消,特此备注。
2020/9/3
在function.php
中加入判断代码后,WebP效果已恢复。代码详情:
// 简单浏览器判断代码
$is_lynx = $is_gecko = $is_winIE = $is_macIE = $is_opera = $is_mozilla = $is_safari = $is_chrome = $is_iphone = false;
if ( isset($_SERVER['HTTP_USER_AGENT']) ) {
if ( strpos($_SERVER['HTTP_USER_AGENT'], 'Lynx') !== false ) {
$is_lynx = true;
} elseif ( stripos($_SERVER['HTTP_USER_AGENT'], 'chrome') !== false ) {
if ( stripos( $_SERVER['HTTP_USER_AGENT'], 'chromeframe' ) !== false ) {
$is_admin = is_admin();
if ( $is_chrome = apply_filters( 'use_google_chrome_frame', $is_admin ) )
header( 'X-UA-Compatible: chrome=1' );
$is_winIE = ! $is_chrome;
} else {
$is_chrome = true;
}
} elseif ( stripos($_SERVER['HTTP_USER_AGENT'], 'safari') !== false ) {
$is_safari = true;
} elseif ( ( strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false || strpos($_SERVER['HTTP_USER_AGENT'], 'Trident') !== false ) && strpos($_SERVER['HTTP_USER_AGENT'], 'Win') !== false ) {
$is_winIE = true;
} elseif ( strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false && strpos($_SERVER['HTTP_USER_AGENT'], 'Mac') !== false ) {
$is_macIE = true;
} elseif ( strpos($_SERVER['HTTP_USER_AGENT'], 'Gecko') !== false ) {
$is_gecko = true;
} elseif ( strpos($_SERVER['HTTP_USER_AGENT'], 'Opera') !== false ) {
$is_opera = true;
} elseif ( strpos($_SERVER['HTTP_USER_AGENT'], 'Mozilla') !== false && strpos($_SERVER['HTTP_USER_AGENT'], 'Mozilla') !== false ) {
$is_mozilla = true;
}
}
if ( $is_safari && stripos($_SERVER['HTTP_USER_AGENT'], 'mobile') !== false )
$is_iphone = true;
$is_IE = ( $is_macIE || $is_winIE );
// 判断是否是Safari/IE并将watermark_webp替换为watermark
function ossreplace($text) {
$return = str_replace('?x-oss-process=style%2Fwatermark_webp', '?x-oss-process=style%2Fwatermark', $text);
$return = str_replace('?x-oss-process=style/watermark_webp', '?x-oss-process=style/watermark', $return);
return $return;
}
if ( $is_safari || $is_IE ) {
add_filter('the_content', 'ossreplace');
}
// 判断是否是其它浏览器并将存量watermark替换为watermark_webp
function ossreplacerev($text) {
$return = str_replace('?x-oss-process=style%2Fwatermark', '?x-oss-process=style%2Fwatermark_webp', $text);
$return = str_replace('?x-oss-process=style/watermark', '?x-oss-process=style/watermark_webp', $return);
return $return;
}
if ( !$is_safari && !$is_IE ) {
add_filter('the_content', 'ossreplacerev');
}
喜欢js的,可以考虑js代码判断WebP:
// 公共方法,操作放原图还是放WebP图
var checkPic = function(isWebP){
$("#pics img").each(function(i,v){
var src = isWebP?$(v).attr('webppic-src'):$(v).attr('pic-src');
$(v).attr('src',src);
})
}
// 第一种方法
var isWebP = false;
var img = new Image();
img.onload = function(){
isWebP = !!(img.height>0 && img.width>0);
checkPic(isWebP);
};
img.onerror = function(){
isWebP = false;
checkPic(isWebP);
};
img.src = './c.webp';
// 第二种方法
var checkWebp = function(){
try{
return (document.createElement('canvas').toDataURL('image/webp').indexOf('data:image/webp') == 0);
}catch(err) {
return false;
}
}
checkPic(checkWebp());
我谷歌浏览器打开也是jpg😏
@青山右键点下载就知道了。
@青山已订正,Windows下需要强制刷新Chrome浏览器后再试。
@S̆̈按了好多次 Ctrl+F5,右键另存为还是 jpg
@老杨我自己测过ok了。问过作者表示无助。再看看吧,有改进了再回复。
@S̆̈现在可以了,估计是缓存还没清理掉吧。另存为是 webp,右键打开的话多了?x-oss-process=style/watermark_webp
图片问题真的是,现在手机拍照就是8M左右,服务器控件压力暴增啊……但又不想压缩图片牺牲图片质量,试试你的办法
@Sherry办法是:1、手机应用商店下载一个批量resize图片的app,处理完毕后再上载。2、进阶使用阿里云oss等工具。
@S̆̈电脑上一直 PPDuck 先压缩再上传。
@老杨我在Windows下用ACDSee,在Mac下用Adobe Bridge CC、PhotoBulk或者干脆自己做个Automator小机器人。😜
@S̆̈那博主你原照片是怎么储存的?
@chojemmy原来就是简单的把jpg上传到oss。
不是阿里云可以用吗,我腾讯云啊
@佛系软件你试试啊