Comment agrandir la vignette de l'article en vedette?

11

La situation est la suivante: j'utilise le plugin Video Thumbnails pour obtenir et définir automatiquement les miniatures youtube / vimeo en tant qu'image publiée. Le problème est que les tailles de vignettes youtube / vimeo par défaut sont juste un peu plus petites que la largeur du contenu principal de mon thème.

Donc, ce dont j'ai besoin, c'est de les augmenter. Si je vais dans la médiathèque, je peux modifier chaque image manuellement, puis définir ma largeur exacte et WordPress la met à l'échelle juste à droite (cela ne me dérange pas que la qualité soit un peu pire). Existe-t-il un moyen pour WP de le faire automatiquement chaque fois qu'une image est téléchargée?

Ceci est ma taille d'image définie: la add_image_size('post-full', 688, 320, true);taille du pouce Vimeo est 640x320.

evaqas
la source
1
Voici un plugin que j'ai écrit pour la mise à l'échelle des miniatures, basé sur la solution de levi et les correctifs de jackrugile. wordpress.org/support/plugin/thumbnail-upscale
khromov

Réponses:

20

Vous pouvez utiliser la fonction native image_resize de Wordpress pour agrandir les images. Wordpress fournit un crochet appelé " image_resize_dimensions " que vous pouvez utiliser pour remplacer les paramètres de recadrage par défaut. Voici une fonction modifiée qui prendra en charge la mise à l'échelle:

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

Maintenant, accrochez cette fonction comme suit:

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

Une fois cela fait, vous pouvez utiliser la fonction image_resize pour augmenter ou réduire les images selon vos besoins.

$cropped_image = image_resize($image_filepath, $width, $height, true);
levi
la source
J'utilise cette méthode cependant lorsque j'essaie de générer l'image recadrée, je reçois simplement l'erreur: Échec de l'enregistrement de l'éditeur d'image - des idées?
Felix Eve
Fonctionne toujours très bien en juillet 2015 avec Wordpress 4.1.5. Exactement ce dont j'avais besoin pour garantir la mise à l'échelle de petites images pour les images en vedette de mes articles.
Mark Rummel
Pour ceux qui cherchent à prendre en charge l'option de position de recadrage, ajoutez le code suivant juste avant le retour de la fonction: 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
Fonctionne toujours très bien en avril 2019 avec Wordpress 5.1.1. Je l'utilise pour forcer des images haut de gamme plus petites que mes souhaits personnalisés add_image_size. Avec le plugin Regenerate Thumbnails.
Mtxz
comment le faire fonctionner avec la add_image_sizefonction?
Gediminas
0

la manière la plus simple serait d'ajouter une taille d'image avec 640x298 et d'utiliser css pour la redimensionner. comme il ne s'agit que d'une mise à l'échelle mineure, la mise à l'échelle du navigateur devrait fonctionner assez bien.

malheureusement, tous les plugins que je connais ne fournissent pas de mise à l'échelle d'image, générant simplement des tailles d'image plus petites, donc si vous voulez avoir le 688x320 sur votre serveur, vous devrez éditer l'un des plugins existants.

si vous avez installé Imagick, vous pouvez modifier votre plugin dans le fichier video-thumbnails.php à la ligne 325, en générant une version plus grande de la miniature, en utilisant ce code:

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

et laissez wordpress en générer la plus petite miniature (en coupant la hauteur). Assurez-vous de créer différentes tailles d'images pour les différentes plates-formes vidéo dans votre code Imagick!

fischi
la source
Je pense que j'irai avec le correctif CSS en ce moment, c'est vraiment le moyen le plus simple / le plus rapide pour aller dans ma situation. J'ai également vérifié les fichiers de base WP et il semble que la fonction de redimensionnement utilise min (); pour déterminer la largeur / hauteur minimale et il n'y a pas de crochets pour modifier cela, donc cela n'améliorera pas mes images lors du téléchargement.
evaqas
Il existe un hook que vous pouvez utiliser appelé "image_resize_dimensions" qui vous permettra de réécrire la fonction sans min ().
levi