Come ingrandire le miniature dei post in primo piano?


11

La situazione è questa: sto usando il plug-in Miniature video per ottenere e impostare automaticamente le miniature di YouTube / Vimeo come immagine post in primo piano. Il problema è che le dimensioni predefinite delle miniature di YouTube / Vimeo sono solo leggermente inferiori alla larghezza del contenuto principale del mio tema.

Quindi quello di cui ho bisogno è ridimensionarli. Se vado al Catalogo multimediale, posso modificare manualmente ogni immagine, quindi impostare la mia larghezza esatta e WordPress la ridimensiona nel modo giusto (non mi dispiace che la qualità sia un po 'peggiore). Quindi c'è un modo in cui WP lo farebbe automaticamente ogni volta che un'immagine viene caricata?

Questa è la dimensione dell'immagine definita: la add_image_size('post-full', 688, 320, true);dimensione del pollice di Vimeo è 640x320.


1
Ecco un plugin che ho scritto per l'upscaling delle miniature, basato sulla soluzione di levi e le correzioni di jackrugile. wordpress.org/support/plugin/thumbnail-upscale
khromov

Risposte:


20

È possibile utilizzare la funzione image_resize nativa di Wordpress per ingrandire le immagini. Wordpress fornisce un hook chiamato " image_resize_dimensions " che puoi usare per sovrascrivere le impostazioni di ritaglio predefinite. Ecco una funzione modificata che supporterà il ridimensionamento:

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

Ora aggancia questa funzione in questo modo:

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

Una volta fatto, puoi usare la funzione image_resize per ridimensionare le immagini su o giù come richiesto.

$cropped_image = image_resize($image_filepath, $width, $height, true);

Sto usando questo metodo, tuttavia, quando provo a generare l'immagine ritagliata, ottengo l'errore: Image Editor Save Failed - qualche idea?
Felix Eve,

Funziona ancora alla grande nel luglio 2015 con Wordpress 4.1.5. Esattamente ciò di cui avevo bisogno per garantire immagini ridotte in scala per le immagini in primo piano dei miei post.
Mark Rummel,

Per coloro che desiderano supportare l'opzione posizione di ritaglio, aggiungi il seguente codice subito prima del ritorno 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

Funziona ancora alla grande aprile 2019 con Wordpress 5.1.1. Lo uso per forzare immagini di alto livello che sono più piccole delle mie desiderate personalizzate add_image_size. Insieme al plug-in Rigenerate miniature.
Mtxz,

come farlo funzionare con la add_image_sizefunzione?
Gediminas,

0

il modo più semplice sarebbe quello di aggiungere una dimensione di immagine con 640x298 e usare css per ridimensionarla. dato che è solo una piccola scala, il ridimensionamento del browser dovrebbe funzionare abbastanza bene.

sfortunatamente, tutti i plugin che conosco non forniscono l'upscaling delle immagini, ma solo la generazione di dimensioni dell'immagine più piccole, quindi se vuoi avere il 688x320 sul tuo server, dovresti modificare uno dei plugin esistenti.

se hai installato Imagick, puoi modificare il tuo plugin nel file video-thumbnails.php sulla linea 325, generando una versione più grande della miniatura, usando 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 lascia che wordpress generi la miniatura più piccola da essa (tagliando l'altezza). Assicurati di creare diverse dimensioni di immagini per i diversi videoplatform nel tuo codice Imagick!


Penso che andrò con la correzione CSS in questo momento, è davvero il modo più semplice / veloce per andare sulla mia situazione. Ho anche controllato i file core di WP e sembra che la funzione di ridimensionamento usi min (); per determinare la larghezza / altezza min e non ci sono ganci per modificarlo, quindi non caricherà le mie immagini durante il caricamento.
Eva

C'è un hook che puoi usare chiamato "image_resize_dimensions" che ti permetterà di riscrivere la funzione senza min ().
levi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.