默認(rèn)情況下,在圖片尺寸大于指定的尺寸時(shí),WordPress 可以把圖像裁剪到比較小的尺寸,但是,在原圖尺寸小于指定尺寸的情況下,WordPress 不會(huì)放大這些圖片到指定的尺寸。
在一些對(duì)圖片尺寸要求比較嚴(yán)格的主題中,如果某個(gè)圖片尺寸小于指定的尺寸,可能會(huì)造成布局的錯(cuò)亂,為用戶帶來(lái)不好的體驗(yàn)。
有些時(shí)候,我們需要的是:不管用戶上傳的圖片是大還是小,在前端輸出的時(shí)候,我們只需要輸出指定尺寸和比例的照片。圖片質(zhì)量是次要的,如果圖片被裁剪的部分比較多,或者放大太大導(dǎo)致圖片模糊的時(shí)候,上傳者自己會(huì)重新調(diào)整圖片到合適的尺寸和比例。
放大并裁剪較小的 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 );
此功能的一個(gè)小缺點(diǎn)和更好的解決辦法
上面的方法有一個(gè)小缺點(diǎn)就是,如果我們只需要一個(gè)小尺寸的圖片,WordPress 還是會(huì)把這個(gè)小圖片放大到更大尺寸的縮略圖,這會(huì)占用一些不必要的服務(wù)器空間,不過(guò)目前的服務(wù)器空是相當(dāng)廉價(jià)的,和這個(gè)功能實(shí)現(xiàn)的效果來(lái)說(shuō),多出來(lái)這一些服務(wù)器空間的成本是相當(dāng)劃算的。
能夠避免上面缺點(diǎn)的更好的解決辦法就是按需裁剪縮放圖片,默認(rèn)不生成縮略圖,前端需要多大的圖片,WordPress 就輸出多大的圖片給前端,目前來(lái)說(shuō),我還沒(méi)有找到實(shí)現(xiàn)的方法,如果您有類似的實(shí)現(xiàn),歡迎在評(píng)論中提出,我們共同探討。



在刀哥的站點(diǎn)也學(xué)到不少東西了,我也來(lái)說(shuō)幾句吧。
跟前端適配的方法還是不少的,主要是按需取用吧。服務(wù)器性能強(qiáng)悍的話,可以選擇timthumb.php,不過(guò)要做好安全方面的事情。預(yù)算足夠的話,可以選擇OSS之類的。網(wǎng)站空間夠大的話,也可以使用WordPress自帶的resize。我個(gè)人比較喜歡不生成任何縮略圖,只在uploads保存原始圖片,然后看具體情況,使用 timthumb.php 或者 OSS。
OSS配合CDN還是挺不錯(cuò)的,還可以做靜態(tài)資源分離,減輕服務(wù)器壓力。畢竟現(xiàn)在國(guó)內(nèi)的服務(wù)器價(jià)格壓的太狠,看著配置挺高,其實(shí)一般般。至于費(fèi)用的話,跟流量是成正比的,如果流量上來(lái)了,還賺不到錢,那建站是為啥?