现在这个博客的图片是直接放在博客这台机器上的,有100Mbps带宽,不过对我来说是有点贵了,所以明年就只有用腾讯云学生机了。今天签了张泛域名的ECC证书,顺便把又拍云也绑定上了自己的域名(又拍云支持ECC证书还是挺让我惊讶的)。

将WP媒体库中的图片上传到又拍云可以使用又拍云插件,设置好后,选择 检查本地服务器附件列表 再选择 上传 即可,不过我使用 启用又拍云服务 按钮发现他有个问题,会把我的https链接替换成http的,所以我直接在自己的数据库批量替换了。方法可以见我在将WordPress转移到新域名写的方法,使用SQL语句

UPDATE wp_posts SET post_content = replace( post_content, 'OLD.domain.com/wp-content/uploads','NEW.domain.com');

替换的时候要注意匹配自己设置的又拍云上传目录。
这里有个坑,在WP的媒体库中插入的图片会被加入一个Classwp-image,这个Class可能会导致你替换图片链接后依然使用的是在WP中上传的图片,如果出现问题,把图片中的这个Class删除就行了。

因为又拍云支持WEBP的云转码,所以我们可以直接在图片链接后加上!/format/webp来获得WEBP格式的图片,不过目前WEBP格式的图片支持率不是特别的高,所以可以在主题的functions.php中加入下面的代码来判断浏览器是否支持WEBP,如果支持就使用WEBP,不支持就使用原图。

function fa_converse_webp($matches) {
   return $matches[1] . $matches['2'] . '!/format/webp';
}

function fa_converse_webp_filter($content){
  global $post;
  $content = preg_replace_callback("/(<img[^>]*src *= *[\"']?)([^\"']*)/i", 'fa_converse_webp' , $content);
  return $content;
}

function fa_is_support_webp(){
  return strstr($_SERVER['HTTP_ACCEPT'],'image/webp');
}

if ( fa_is_support_webp() ) add_filter('the_content','fa_converse_webp_filter');

因为可能有部分浏览器支持 WEBP 但是不会发送 image/webp 的响应头,所以可以使用 js 去拉取一个 WEBP 格式图片的宽度,能拉到就说明支持,之后为其添加一个识别用的 Cookie 。
目前未发现这样的浏览器,之前华为自带浏览器已经修复了这个问题

PS: 现在又拍云中可以开启一个 Beta 功能,它会自动检测浏览器是否支持 Webp 然后发送 Webp 的副本,详情看这里

其他的又拍云图片云处理可以看它的文档,我的博客已经处理完了。