Come ridimensionare in modo automatico le miniature dei post in evidenza?
La situazione è questa: sto utilizzando il plugin Video Thumbnails per ottenere e impostare automaticamente le miniature di YouTube/Vimeo come immagini in evidenza dei post. Il problema è che le dimensioni predefinite delle miniature di YouTube/Vimeo sono leggermente inferiori alla larghezza del contenuto principale del mio tema.
Quindi ho bisogno di ingrandirle. Se vado nella Libreria Media, posso modificare manualmente ogni immagine, impostare la larghezza esatta e WordPress la ridimensiona correttamente (non mi preoccupa che la qualità sia leggermente peggiore). Esiste un modo per far sì che WordPress lo faccia automaticamente ogni volta che viene caricata un'immagine?
Questa è la dimensione dell'immagine che ho definito: add_image_size('post-full', 688, 320, true);
La dimensione della miniatura di Vimeo è 640x320.

Puoi utilizzare la funzione nativa di Wordpress image_resize per ridimensionare le immagini. Wordpress fornisce un hook chiamato "image_resize_dimensions" che puoi utilizzare per sovrascrivere le impostazioni predefinite di ritaglio. Ecco una funzione modificata che supporterà l'ingrandimento:
function image_crop_dimensions($default, $orig_w, $orig_h, $new_w, $new_h, $crop){
if ( !$crop ) return null; // lascia che la funzione predefinita di wordpress gestisca questo caso
$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 );
}
Ora collega questa funzione in questo modo:
add_filter('image_resize_dimensions', 'image_crop_dimensions', 10, 6);
Una volta fatto questo, puoi utilizzare la funzione image_resize per ingrandire o ridurre le immagini secondo necessità.
$cropped_image = image_resize($image_filepath, $width, $height, true);

Sto utilizzando questo metodo, ma quando provo a generare l'immagine ritagliata ottengo solo l'errore: Image Editor Save Failed - avete qualche idea?

Funziona ancora perfettamente a luglio 2015 con Wordpress 4.1.5. Esattamente ciò di cui avevo bisogno per garantire che le immagini piccole venissero ridimensionate per le Featured Image dei miei articoli.

Per chi sta cercando di supportare l'opzione di posizionamento del ritaglio, aggiungete il seguente codice appena prima del return della funzione:
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; } }

Funziona ancora perfettamente ad aprile 2019 con Wordpress 5.1.1. Lo uso per forzare l'upscale delle immagini più piccole delle dimensioni personalizzate desiderate con add_image_size
. Insieme al plugin Rigenera Thumbnail.

il modo più semplice sarebbe aggiungere una dimensione immagine di 640x298 e utilizzare il CSS per ridimensionarla. Trattandosi di un ridimensionamento minore, il ridimensionamento effettuato dal browser dovrebbe funzionare abbastanza bene.
Purtroppo, tutti i plugin che conosco non forniscono l'upscaling delle immagini, ma generano solo dimensioni più piccole delle immagini, quindi se vuoi avere la dimensione 688x320 sul tuo server, dovresti modificare uno dei plugin esistenti.
Se hai Imagick installato, puoi modificare il tuo plugin nel file video-thumbnails.php alla riga 325, generando una versione più grande della miniatura, utilizzando questo codice:
$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 );
e lasciare che WordPress generi la miniatura più piccola da essa (tagliando l'altezza). Assicurati di creare dimensioni immagine diverse per le diverse piattaforme video nel tuo codice Imagick!

Penso che opterò per la soluzione CSS al momento, è davvero il modo più semplice/veloce nella mia situazione. Ho anche controllato i file core di WP e sembra che la funzione di ridimensionamento usi min(); per determinare larghezza/altezza minima e non ci sono hook per modificarlo, quindi non scalerà le mie immagini al caricamento.
