问题描述
我有一系列的帖子,都有精选的图片,但是我需要能够自定义裁剪右上角。在这种情况下,我需要他们从右上方裁剪,但是也可以自己定位这一点。
目前, add_image_size() 功能正在从图像的中心拍摄。不总是漂亮!
最佳解决方案
中间图像生成非常僵硬。 image_resize()
保持接近代码,完全没有钩子。
相当多的选择是挂钩到 wp_generate_attachment_metadata
,并用你自己的 WP-generated 映像 (这将需要一个 image_resize()
叉) 。
我需要这个工作,所以我可以稍后分享一些代码。
好的,这里是粗糙的,但是工作的例子。请注意,以这种方式设置裁剪需要了解 imagecopyresampled()
。
add_filter('wp_generate_attachment_metadata', 'custom_crop');
function custom_crop($metadata) {
$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
return $metadata;
}
次佳解决方案
WordPress codex 有以下答案。
Set the image size by cropping the image and defining a crop position:
add_image_size( 'custom-size', 220, 220, array( 'left', 'top' ) ); // Hard crop left top
When setting a crop position, the first value in the array is the x axis crop position, the second is the y axis crop position.
x_crop_position accepts ‘left’ ‘center’, or ‘right’. y_crop_position accepts ‘top’, ‘center’, or ‘bottom’. By default, these values default to ‘center’ when using hard crop mode.
而且 codex 也引用了一个页面来显示作物位置的作用。
http://havecamerawilltravel.com/photographer/wordpress-thumbnail-crop
第三种解决方案
我已经开发出了一个解决这个问题的方案,它不需要攻击内核:http://bradt.ca/archives/image-crop-position-in-wordpress/
我也提交了一个补丁到核心:http://core.trac.wordpress.org/ticket/19393
将自己添加为机票上的 Cc,以显示您将其添加到核心的支持。
第四种方案
您可以使用插件 Thumbnail Crop Position 选择缩略图的裁剪位置。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。