wordpress中thumbnail图片尺寸强制crop的二个方法

1.利用timthumb.php

//这里设定timthumb.php存放在子主题中
function thumbnail_filter($html, $post_id, $post_thumbnail_id, $size, $attr){
        global $blog_id, $_wp_additional_image_sizes;
 
        $image = wp_get_attachment_image_src($post_thumbnail_id, 'full');
 
        //使用数组或指定thumb名并crop属性存在
        if( is_array($size) || (isset($_wp_additional_image_sizes[$size]) && $_wp_additional_image_sizes[$size]['crop']) ){
            $img_size[0] = ( !is_array($size) ) ? $_wp_additional_image_sizes[$size]['width'] : $size[0];
            $img_size[1] = ( !is_array($size) ) ?  $_wp_additional_image_sizes[$size]['height'] : $size[1];
            $hwstring = image_hwstring($img_size[0], $img_size[1]);
                        //如已取图片与指出的不符才处理
            if( !strpos($html,$hwstring) ){
                $patterns = array('/width="(.*?)" height="(.*?)" /', '/src="(.*?)"/');
                $replacements = array('', 'src="'.get_stylesheet_directory_uri().'/timthumb.php?src='.$image[0].'&w='.$img_size[0].'&h='.$img_size[1].'&zc=1"');
                $html = preg_replace($patterns, $replacements, $html);                
            }        
        }
 
        return $html;
}
add_filter('post_thumbnail_html', 'thumbnail_filter', 10, 5);
//这是一个指定图片的处理
function get_timthumb_src($src,$size){
    global $_wp_additional_image_sizes;
    if( is_array($size) || isset($_wp_additional_image_sizes[$size]) ){
            $img_size[0] = ( !is_array($size) ) ? $_wp_additional_image_sizes[$size]['width'] : $size[0];
            $img_size[1] = ( !is_array($size) ) ?  $_wp_additional_image_sizes[$size]['height'] : $size[1];
            $src = get_stylesheet_directory_uri().'/timthumb.php?src='.$image[0].'&w='.$img_size[0].'&h='.$img_size[1].'&zc=1';
    }
    return $src;
}
需要说明一下的是:采用子目录方式使用wordpress MU的情况下,timthumb会找不到图片,即使你访问图片并发现图片存在时,国外有多种所谓的解决方法,wordpress几次升级后,大多已无效,其实原因在于wordpress已对图片urlrewrite了,所以将$image[0](图片地址)相应处理一下就行了.

2.强制crop指定大小,改变wordpress的crop方式,即使小图片也生成放大后的图片

class ThumbnailUpscaler
{
    static function image_crop_dimensions($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 );
    }
}
 
add_filter('image_resize_dimensions', array('ThumbnailUpscaler', 'image_crop_dimensions'), 10, 6);

此方法如add_image_size过多过大的crop,可能会耗资源过重

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值