Як змінити масштаб зображених мініатюр?


11

Ситуація така: я використовую плагін Video Thumbnails для автоматичного отримання та встановлення мініатюр 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

Відповіді:


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 року з 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 (); щоб визначити мінімальну ширину / висоту, і немає жодних гачків, щоб це змінити, тому він не змінює масштаб моїх зображень під час завантаження.
evaqas

Існує гачок, який ви можете використовувати під назвою "image_resize_dimensions", що дозволить вам переписати функцію без min ().
levi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.