Come ridimensionare in modo automatico le miniature dei post in evidenza?

30 apr 2012, 18:10:36
Visualizzazioni: 20.8K
Voti: 13

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.

1
Commenti

Ecco un plugin che ho scritto per il ridimensionamento delle miniature, basato sulla soluzione di levi e con le correzioni di jackrugile. https://wordpress.org/support/plugin/thumbnail-upscale

khromov khromov
27 lug 2015 00:41:53
Tutte le risposte alla domanda 2
6
24

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);
12 set 2012 17:18:06
Commenti

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

Felix Eve Felix Eve
17 apr 2013 11:22:26

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.

Mark Rummel Mark Rummel
11 lug 2015 15:42:11

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

jackrugile jackrugile
25 lug 2015 00:43:01

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.

Mtxz Mtxz
11 apr 2019 04:18:47

come farlo funzionare con la funzione add_image_size?

Gediminas Gediminas
16 ago 2019 14:53:56

funziona ancora in WP 5.7

pathfinder pathfinder
22 mar 2021 04:40:06
Mostra i restanti 1 commenti
2

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!

30 apr 2012 18:35:25
Commenti

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.

evaqas evaqas
1 mag 2012 09:49:51

C'è un hook che puoi usare chiamato "image_resize_dimensions" che ti permetterà di riscrivere la funzione senza min().

levi levi
6 set 2012 19:34:03