默认情况下,在图片尺寸大于指定的尺寸时,WordPress 可以把图像裁剪到比较小的尺寸,但是,在原图尺寸小于指定尺寸的情况下,WordPress 不会放大这些图片到指定的尺寸。
在一些对图片尺寸要求比较严格的主题中,如果某个图片尺寸小于指定的尺寸,可能会造成布局的错乱,为用户带来不好的体验。
有些时候,我们需要的是:不管用户上传的图片是大还是小,在前端输出的时候,我们只需要输出指定尺寸和比例的照片。图片质量是次要的,如果图片被裁剪的部分比较多,或者放大太大导致图片模糊的时候,上传者自己会重新调整图片到合适的尺寸和比例。
放大并裁剪较小的 WordPress 缩略图到指定尺寸
为了能让 WordPress 放大较小的图片,并把图片裁剪到指定的尺寸,把下面的代码添加的WordPress主题的 functions.php 中 即可。
add_filter( 'image_resize_dimensions', function ( $default, $orig_w, $orig_h, $new_w, $new_h, $crop ){
if ( !$crop ) return null; // let the wordpress default function handle this
$aspect_ratio = $orig_w / $orig_h;
$size_ratio = max($new_w / $orig_w, $new_h / $orig_h);
$crop_w = round($new_w / $size_ratio);
$crop_h = round($new_h / $size_ratio);
$s_x = floor( ($orig_w - $crop_w) / 2 );
$s_y = floor( ($orig_h - $crop_h) / 2 );
return array( 0, 0, (int) $s_x, (int) $s_y, (int) $new_w, (int) $new_h, (int) $crop_w, (int) $crop_h );
}, 10, 6 );
此功能的一个小缺点和更好的解决办法
上面的方法有一个小缺点就是,如果我们只需要一个小尺寸的图片,WordPress 还是会把这个小图片放大到更大尺寸的缩略图,这会占用一些不必要的服务器空间,不过目前的服务器空是相当廉价的,和这个功能实现的效果来说,多出来这一些服务器空间的成本是相当划算的。
能够避免上面缺点的更好的解决办法就是按需裁剪缩放图片,默认不生成缩略图,前端需要多大的图片,WordPress 就输出多大的图片给前端,目前来说,我还没有找到实现的方法,如果您有类似的实现,欢迎在评论中提出,我们共同探讨。
3 thoughts on “强制放大并裁剪较小的 WordPress 图片为指定尺寸的缩略图”
在刀哥的站点也学到不少东西了,我也来说几句吧。
跟前端适配的方法还是不少的,主要是按需取用吧。服务器性能强悍的话,可以选择timthumb.php,不过要做好安全方面的事情。预算足够的话,可以选择OSS之类的。网站空间够大的话,也可以使用WordPress自带的resize。我个人比较喜欢不生成任何缩略图,只在uploads保存原始图片,然后看具体情况,使用 timthumb.php 或者 OSS。
OSS配合CDN还是挺不错的,还可以做静态资源分离,减轻服务器压力。毕竟现在国内的服务器价格压的太狠,看着配置挺高,其实一般般。至于费用的话,跟流量是成正比的,如果流量上来了,还赚不到钱,那建站是为啥?
OSS 确实不错,图片比较多的客户网站,现在都会建议客户用 OSS,费用不高,还不用担心服务器崩了导致图片丢失。
感谢分享