Как увеличить масштаб миниатюры записи?
Ситуация следующая: я использую плагин 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" — есть идеи, в чем проблема?
Felix Eve
В июле 2015 года всё ещё отлично работает с WordPress 4.1.5. Именно то, что мне нужно, чтобы маленькие изображения масштабировались для миниатюр записей.
Mark Rummel
Для тех, кто хочет добавить поддержку позиции обрезки, добавьте следующий код прямо перед 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
По-прежнему отлично работает в апреле 2019 года с WordPress 5.1.1. Я использую его для принудительного увеличения изображений, которые меньше, чем мой пользовательский размер, заданный через add_image_size. Вместе с плагином Regenerate Thumbnails.
Mtxz
Самый простой способ — добавить размер изображения 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(); для определения минимальной ширины/высоты, и нет хуков, чтобы это изменить, поэтому мои изображения не будут масштабироваться вверх при загрузке.
evaqas