Как увеличить уменьшенное изображение избранного поста?


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
хромов

Ответы:


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);

Я использую этот метод, однако, когда я пытаюсь сгенерировать обрезанное изображение, я просто получаю сообщение об ошибке: Image Editor Save Failed - есть идеи?
Феликс Ив

В июле 2015 года все еще отлично работает с Wordpress 4.1.5. Именно то, что мне нужно, чтобы обеспечить увеличение небольших изображений для избранных изображений моих сообщений.
Марк Руммель

Для тех, кто хочет поддержать опцию позиции обрезки, добавьте следующий код прямо перед возвратом функции: 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

Все еще прекрасно работает в апреле 2019 года с Wordpress 5.1.1. Я использую его для увеличения масштаба изображений, которые меньше, чем мой пользовательский желаемый add_image_size. Вместе с плагином Regenerate Thumbnails.
Mtxz

как заставить его работать с add_image_sizeфункцией?
Гедиминас

0

Самый простой способ - добавить размер изображения с разрешением 640x298 и использовать CSS для его изменения. поскольку это лишь небольшое увеличение, масштабирование браузера должно работать вполне нормально.

К сожалению, все плагины, которые я знаю, не обеспечивают масштабирование изображения, а просто генерируют изображения меньшего размера, поэтому, если вы хотите иметь 688x320 на своем сервере, вам придется отредактировать один из существующих плагинов.

если у вас установлен Imagick, вы можете изменить свой плагин в файле video-thumbnails.php в строке 325, создав большую версию эскиза, используя этот код:

$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!


Я думаю, что я пойду с исправлением CSS прямо сейчас, это действительно самый простой / быстрый способ решить мою ситуацию. Я также проверил файлы ядра WP и похоже, что функция изменения размера использует min (); чтобы определить минимальную ширину / высоту, и нет никаких крючков, чтобы изменить это, так что это не увеличит мои изображения при загрузке.
Евак

Существует ловушка, которую вы можете использовать под названием «image_resize_dimensions», которая позволит вам переписать функцию без min ().
Леви
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.