Jak powiększyć miniaturę polecanego postu?

11

Sytuacja jest następująca: używam wtyczki Miniatury wideo, aby automatycznie pobierać i ustawiać miniatury youtube / vimeo jako obraz polecanych postów. Problem polega na tym, że domyślne rozmiary miniatur youtube / vimeo są nieco mniejsze niż szerokość głównej zawartości mojego motywu.

Potrzebuję więc ich skalowania. Jeśli przejdę do biblioteki multimediów, mogę edytować każdy obraz ręcznie, a następnie ustawić dokładną szerokość, a WordPress skaluje go dokładnie (nie mam nic przeciwko, że jakość jest nieco gorsza). Czy istnieje sposób, aby WP robiłoby to automatycznie za każdym razem, gdy obraz zostanie załadowany?

To jest mój zdefiniowany rozmiar obrazu: add_image_size('post-full', 688, 320, true);rozmiar kciuka Vimeo to 640x320.

evaqas
źródło
1
Oto wtyczka, którą napisałem do skalowania miniatur, oparta na rozwiązaniu Levi i poprawkach Jackrugile. wordpress.org/support/plugin/thumbnail-upscale
khromov

Odpowiedzi:

20

Możesz użyć natywnej funkcji Word_resize image_resize do skalowania obrazów. Wordpress udostępnia haczyk o nazwie „ image_resize_dimensions ”, którego można użyć do zastąpienia domyślnych ustawień przycinania. Oto zmodyfikowana funkcja, która będzie obsługiwać skalowanie w górę:

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

Teraz zaczep tę funkcję tak:

add_filter('image_resize_dimensions', 'image_crop_dimensions', 10, 6);

Gdy to zrobisz, możesz użyć funkcji image_resize, aby odpowiednio skalować obrazy w górę lub w dół.

$cropped_image = image_resize($image_filepath, $width, $height, true);
Levi
źródło
Używam tej metody, ale kiedy próbuję wygenerować przycięty obraz, po prostu pojawia się błąd: Zapisywanie edytora obrazów nie powiodło się - jakieś pomysły?
Felix Eve
Nadal działa świetnie w lipcu 2015 r. Dzięki Wordpress 4.1.5. Dokładnie to, czego potrzebowałem, aby zapewnić skalowanie małych obrazów w polecanych obrazach moich postów.
Mark Rummel,
Dla tych, którzy chcą obsługiwać opcję pozycji przycięcia, dodaj następujący kod tuż przed powrotem funkcji: 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
Nadal działa świetnie w kwietniu 2019 r. Dzięki Wordpress 5.1.1. Używam go do wymuszania skalowania obrazów, które są mniejsze niż moje niestandardowe pożądane add_image_size. Wraz z wtyczką Regenerate Thumbnails.
Mtxz
jak sprawić, by działał z add_image_sizefunkcją?
Gediminas,
0

najprościej byłoby dodać rozmiar obrazu 640x298 i użyć css, aby zmienić jego rozmiar. ponieważ jest to tylko niewielki wzrost skali, skalowanie przeglądarki powinno działać całkiem dobrze.

niestety wszystkie znane mi wtyczki nie zapewniają skalowania obrazu, tylko generowanie mniejszych rozmiarów obrazu, więc jeśli chcesz mieć 688x320 na swoim serwerze, musisz edytować jedną z istniejących wtyczek.

jeśli masz zainstalowany Imagick, możesz zmienić wtyczkę w pliku video-thumbnails.php w linii 325, generując większą wersję miniatury, używając tego kodu:

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

i niech wordpress wygeneruje z niego mniejszą miniaturę (obcięcie wysokości). Pamiętaj, aby w kodzie Imagick utworzyć różne rozmiary obrazów dla różnych platform wideo!

fischi
źródło
Myślę, że pójdę teraz z poprawką CSS, to naprawdę najłatwiejszy / najszybszy sposób na rozwiązanie mojej sytuacji. Sprawdziłem również podstawowe pliki WP i wydaje się, że funkcja zmiany rozmiaru używa min (); aby określić minimalną szerokość / wysokość i nie ma żadnych haczyków, aby to zmienić, więc nie przeskaluje moich zdjęć po przesłaniu.
evaqas
Istnieje haczyk, którego możesz użyć, o nazwie „image_resize_dimensions”, który pozwoli ci przepisać funkcję bez min ().
levi