如何按比例放大精选文章缩略图?


11

情况是这样的:我正在使用“视频缩略图”插件自动获取和设置youtube / vimeo缩略图作为发布的特色图片。问题在于,默认的youtube / vimeo缩略图大小仅比我的主题主要内容宽度小一点。

所以我需要按比例放大它们。如果转到媒体库,则可以手动编辑每个图像,然后设置确切的宽度,WordPress将其正确缩放(我不介意质量会稍差一些)。那么,是否有一种方法可以使WP在每次上传图像时自动执行此操作?

这是我定义的图像尺寸:add_image_size('post-full', 688, 320, true);Vimeo拇指尺寸为640x320。


1
这是我写的一个用于按比例缩放缩略图的插件,该插件基于levi的解决方案和jackrugile的修复程序。wordpress.org/support/plugin/thumbnail-upscale
khromov

Answers:


20

您可以使用本机的Wordpress image_resize函数放大图像。WordPress提供了一个名为“ image_resize_dimensions ” 的钩子,您可以使用该钩子覆盖默认的裁剪设置。这是修改后的功能,将支持按比例放大:

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', 'image_crop_dimensions', 10, 6);

完成后,您可以使用image_resize函数根据需要放大或缩小图像。

$cropped_image = image_resize($image_filepath, $width, $height, true);

我正在使用此方法,但是当我尝试生成裁剪的图像时,我只会收到错误:图像编辑器保存失败-有什么想法吗?
菲利克斯·夏娃

在2015年7月使用Wordpress 4.1.5仍然可以很好地工作。正是我所需要的,以确保按我的帖子的“特色图片”放大小图片。
Mark Rummel

对于那些希望支持作物位置选项的人,在函数返回之前添加以下代码: if( is_array( $crop ) ) { if( $crop[ 0 ] === 'left' ) { $s_x = 0; } else if( $crop[ 0 ] === 'right' ) { $s_x = $orig_w - $crop_w;} if( $crop[ 1 ] === 'top' ) { $s_y = 0; } else if( $crop[ 1 ] === 'bottom' ) { $s_y = $orig_h - $crop_h; } }
jackrugile 2015年

仍然可以在2019年4月与Wordpress 5.1.1一起使用。我用它来强制生成比我的自定义要求小的图像add_image_size。以及“重新生成缩略图”插件。
Mtxz

如何使其与add_image_size功能一起工作?
Gediminas '18

0

最简单的方法是添加640x298的图片大小,然后使用CSS调整大小。由于这只是一个较小的扩展,因此浏览器的扩展应该可以正常工作。

不幸的是,我所知道的所有插件都不提供图像放大功能,只是生成较小的图像尺寸,因此,如果要在服务器上安装688x320,则必须编辑其中一个现有插件。

如果安装了Imagick,则可以使用以下代码在第325行的video-thumbnails.php文件中更改插件,以生成较大版本的缩略图:

$image_big = new Imagick();
$image_big->setOption('jpeg:size', '688x344');
$image_big->readImage($new_thumbnail);

$upload = wp_upload_bits( basename( $new_thumbnail ), null, $image_big );

然后让wordpress从中生成较小的缩略图(剪切高度)。请确保为您的Imagick代码中的不同Videoplatform制作不同的Imageizes!


我想我现在将使用CSS修复程序,这确实是解决我的情况的最简单/最快的方法。我还检查了WP核心文件,似乎调整大小的函数使用min();。确定最小宽度/高度,并且没有钩子可以修改它,因此它不会在上传时放大我的图像。
evaqas,2012年

您可以使用一个名为“ image_resize_dimensions”的钩子,该钩子使您无需min()即可重写该函数。
levi 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.