Как увеличить масштаб миниатюры записи?
Ситуация следующая: я использую плагин Video Thumbnails для автоматического получения и установки миниатюр YouTube/Vimeo в качестве изображений записей. Проблема в том, что стандартные размеры миниатюр YouTube/Vimeo немного меньше ширины основного контента моей темы.
Поэтому мне нужно их увеличить. Если я перехожу в Медиатеку, я могу редактировать каждое изображение вручную, затем установить точную ширину, и WordPress масштабирует его правильно (меня не беспокоит, что качество немного хуже). Есть ли способ, чтобы WP делал это автоматически каждый раз при загрузке изображения?
Вот мой определенный размер изображения: add_image_size('post-full', 688, 320, true); // Задать размер изображения
Размер миниатюры Vimeo - 640x320.

Вы можете использовать нативную функцию 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);

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

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

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

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

Самый простой способ — добавить размер изображения 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-коде!

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