如何使Add_Image_Size()从顶部裁剪?

时间:2011-06-24 作者:Mild Fuzz

我有一系列帖子,都有特色图片,但我需要能够定制裁剪右上角。在本例中,我需要从右上角裁剪它们,但也需要知道如何自己定位该点。

目前,add\\u image\\u size()函数正在从图像中心进行裁剪。不总是很漂亮!!

5 个回复
最合适的回答,由SO网友:Rarst 整理而成

中间图像生成非常严格。image_resize() 使其接近代码,并且完全没有挂钩。

几乎唯一的选择就是wp_generate_attachment_metadata 并用您自己的图像覆盖WP生成的图像(这需要一点image_resize() 叉子)。

我工作时需要这个,以便以后可以共享一些代码。

好的,这是一个粗略但有效的例子。请注意,以这种方式设置crop需要了解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;
}

SO网友:ewroman

Wordpress codex的答案如下。

通过裁剪图像并定义裁剪位置来设置图像大小:

add_image_size( \'custom-size\', 220, 220, array( \'left\', \'top\' ) ); // Hard crop left top
设置裁剪位置时,阵列中的第一个值是x轴裁剪位置,第二个值是y轴裁剪位置。

x\\U裁剪位置接受“左”、“中”或“右”。y\\U裁剪位置接受“顶部”、“中心”或“底部”。默认情况下,使用硬裁剪模式时,这些值默认为“居中”。

此外,codex还引用了一个页面,该页面显示了作物位置的行为。

http://havecamerawilltravel.com/photographer/wordpress-thumbnail-crop

SO网友:bradt

我开发了一种解决此问题的方法,不需要对核心进行黑客攻击:http://bradt.ca/archives/image-crop-position-in-wordpress/

我还向core提交了一个补丁:http://core.trac.wordpress.org/ticket/19393

将您自己添加为票证上的Cc,以表示您支持将其添加到core。

SO网友:PoseLab

您可以使用插件Thumbnail Crop Position 选择缩略图的裁剪位置。

SO网友:Niente0

此处的替代解决方案:http://pixert.com/blog/cropping-post-featured-thumbnails-from-top-instead-of-center-in-wordpress-with-native-cropping-tool/

只需将此代码添加到函数中。php,然后使用“重新生成缩略图”插件(https://wordpress.org/plugins/regenerate-thumbnails/):

function px_image_resize_dimensions( $payload, $orig_w, $orig_h, $dest_w, $dest_h, $crop ){

// Change this to a conditional that decides whether you want to override the defaults for this image or not.
if( false )
return $payload;

if ( $crop ) {
// crop the largest possible portion of the original image that we can size to $dest_w x $dest_h
$aspect_ratio = $orig_w / $orig_h;
$new_w = min($dest_w, $orig_w);
$new_h = min($dest_h, $orig_h);

if ( !$new_w ) {
$new_w = intval($new_h * $aspect_ratio);
}

if ( !$new_h ) {
$new_h = intval($new_w / $aspect_ratio);
}

$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 = 0; // [[ formerly ]] ==> floor( ($orig_w - $crop_w) / 2 );
$s_y = 0; // [[ formerly ]] ==> floor( ($orig_h - $crop_h) / 2 );
} else {
// don\'t crop, just resize using $dest_w x $dest_h as a maximum bounding box
$crop_w = $orig_w;
$crop_h = $orig_h;

$s_x = 0;
$s_y = 0;

list( $new_w, $new_h ) = wp_constrain_dimensions( $orig_w, $orig_h, $dest_w, $dest_h );
}

// if the resulting image would be the same size or larger we don\'t want to resize it
if ( $new_w >= $orig_w && $new_h >= $orig_h )
return false;

// the return array matches the parameters to imagecopyresampled()
// int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h
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\', \'px_image_resize_dimensions\', 10, 6 );

结束

相关推荐

Can plugins become obsolete?

我认为WordPress插件是由第三方制作的。插件是否必须与WordPress升级保持同步?插件会过时吗?如果它们确实过时了,比如Linkedin共享按钮、推特推特按钮和类似Facebook的按钮的插件,切换到不同的插件会导致喜欢/推特/共享的数量丢失吗?如果插件可能会过时,那么它会发生吗?或者插件通常是最新的?或者他们是开源的,所以其他人会让他们保持最新?(正如你可能猜到的,我不是程序员。)