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

30 апр. 2012 г., 18:10:36
Просмотры: 20.8K
Голосов: 13

Ситуация следующая: я использую плагин Video Thumbnails для автоматического получения и установки миниатюр YouTube/Vimeo в качестве изображений записей. Проблема в том, что стандартные размеры миниатюр YouTube/Vimeo немного меньше ширины основного контента моей темы.

Поэтому мне нужно их увеличить. Если я перехожу в Медиатеку, я могу редактировать каждое изображение вручную, затем установить точную ширину, и WordPress масштабирует его правильно (меня не беспокоит, что качество немного хуже). Есть ли способ, чтобы WP делал это автоматически каждый раз при загрузке изображения?

Вот мой определенный размер изображения: add_image_size('post-full', 688, 320, true); // Задать размер изображения Размер миниатюры Vimeo - 640x320.

1
Комментарии

Вот плагин, который я написал для увеличения миниатюр, основанный на решении от levi и исправлениях от jackrugile. https://wordpress.org/support/plugin/thumbnail-upscale

khromov khromov
27 июл. 2015 г. 00:41:53
Все ответы на вопрос 2
6
24

Вы можете использовать нативную функцию 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; // пусть стандартная функция WordPress обработает этот случай

    $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);
12 сент. 2012 г. 17:18:06
Комментарии

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

Felix Eve Felix Eve
17 апр. 2013 г. 11:22:26

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

Mark Rummel Mark Rummel
11 июл. 2015 г. 15:42:11

Для тех, кто хочет добавить поддержку позиции обрезки, добавьте следующий код прямо перед return функции:

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 jackrugile
25 июл. 2015 г. 00:43:01

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

Mtxz Mtxz
11 апр. 2019 г. 04:18:47

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

Gediminas Gediminas
16 авг. 2019 г. 14:53:56

всё ещё работает в WP 5.7

pathfinder pathfinder
22 мар. 2021 г. 04:40:06
Показать остальные 1 комментариев
2

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

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

Если у вас установлен 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-коде!

30 апр. 2012 г. 18:35:25
Комментарии

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

evaqas evaqas
1 мая 2012 г. 09:49:51

Есть хук под названием "image_resize_dimensions", который позволит вам переписать функцию без использования min().

levi levi
6 сент. 2012 г. 19:34:03