这种方法需要你用bt_add_image_size代替原来我们习惯的add_image_size,具体的使用方法我们就不详细解释,总之这个函数给出了第三个参数,让你可以规定裁剪的开始位置。
而实际上,更为简洁的方法是,我找到一个插件,似乎可以实现这个功能,你不妨下载尝试。
Shailan.com Staff则提供了一个更直接的方法,就是修改wordpress系统文件/wp-includes/media.php,找到:
$s_x = floor( ($orig_w - $crop_w) / 2 );
$s_y = floor( ($orig_h - $crop_h) / 2 );
把其中的$s_y修改为:
总之,这种方法直接有效且最容易令人理解,因为$s_x和$s_y就是wordpress系统在裁剪时,裁剪区域的起始位置。而且他还推荐了一个插件:Regenerate Thumbnails,应是基于这种方法来实现的。
在stackexchange社区还有人用这样的方法更加便捷,或许你可以借鉴,但是否奏效还需要验证:
add_filter('wp_generate_attachment_metadata', 'custom_crop');</p>
<p>function custom_crop($metadata) {</p>
<p> $uploads = wp_upload_dir();
$file = path_join( $uploads['basedir'], $metadata['file'] ); // original image file
list( $year, $month ) = explode( '/', $metadata['file'] );
$target = path_join( $uploads['basedir'], "{$year}/{$month}/".$metadata['sizes']['medium']['file'] ); // intermediate size file
$image = imagecreatefromjpeg($file); // original image resource
$image_target = wp_imagecreatetruecolor( 44, 44 ); // blank image to fill
imagecopyresampled($image_target, $image, 0, 0, 25, 15, 44, 44, 170, 170); // crop original
imagejpeg($image_target, $target, apply_filters( 'jpeg_quality', 90, 'image_resize' )); // write cropped to file</p>
<p> return $metadata;
}