Wie skaliere ich das Miniaturbild eines Postings?

11

Die Situation ist folgende: Ich verwende das Video-Thumbnails-Plugin, um automatisch YouTube- / Vimeo-Thumbnails als Post-Feature-Bild abzurufen und festzulegen. Das Problem ist, dass die Standardgrößen für YouTube / Vimeo-Miniaturansichten nur ein bisschen kleiner sind als die Breite meines Hauptinhalts.

Ich muss sie also vergrößern. Wenn ich in die Medienbibliothek gehe, kann ich jedes Bild manuell bearbeiten, dann meine genaue Breite einstellen und WordPress skaliert es genau richtig (es macht mir nichts aus, dass die Qualität etwas schlechter ist). Gibt es eine Möglichkeit, wie WP dies jedes Mal automatisch tun würde, wenn ein Bild hochgeladen wird?

Dies ist meine definierte Bildgröße: Die add_image_size('post-full', 688, 320, true);Vimeo-Daumengröße beträgt 640 x 320.

evaqas
quelle
1
Hier ist ein Plugin, das ich für das Hochskalieren von Thumbnails geschrieben habe, basierend auf der Lösung von Levi und Korrekturen von Jackrugile. wordpress.org/support/plugin/thumbnail-upscale
khromov

Antworten:

20

Sie können die native Wordpress- Funktion image_resize verwenden, um Bilder zu skalieren. Wordpress bietet einen Hook namens " image_resize_dimensions ", mit dem Sie die Standardeinstellungen für das Zuschneiden überschreiben können. Hier ist eine modifizierte Funktion, die das Skalieren unterstützt:

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

Haken Sie nun diese Funktion wie folgt ein:

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

Sobald dies erledigt ist, können Sie die Funktion image_resize verwenden, um Bilder nach Bedarf zu vergrößern oder zu verkleinern.

$cropped_image = image_resize($image_filepath, $width, $height, true);
levi
quelle
Ich verwende diese Methode, aber wenn ich versuche, das zugeschnittene Bild zu generieren, erhalte ich nur die Fehlermeldung: Bildeditor Speichern fehlgeschlagen - irgendwelche Ideen?
Felix Eve
Funktioniert im Juli 2015 mit Wordpress 4.1.5 immer noch hervorragend. Genau das, was ich brauchte, um sicherzustellen, dass kleine Bilder für die empfohlenen Bilder meiner Posts vergrößert werden.
Mark Rummel
Wenn Sie die Option für die 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; } }
Ernteposition unterstützen möchten
Funktioniert immer noch hervorragend im April 2019 mit Wordpress 5.1.1. Ich verwende es, um hochskalierte Bilder zu erzwingen, die kleiner sind als von mir gewünscht add_image_size. Zusammen mit dem Regenerate Thumbnails Plugin.
Mtxz
Wie add_image_sizefunktioniert es mit der Funktion?
Gediminas
0

Am einfachsten wäre es, eine Bildgröße mit 640 x 298 hinzuzufügen und die Größe mithilfe von CSS zu ändern. Da es sich nur um eine geringfügige Vergrößerung handelt, sollte die Browser-Skalierung einwandfrei funktionieren.

Leider bieten alle mir bekannten Plugins keine Bild-Upscaling-Funktion, sondern nur die Generierung kleinerer Bildgrößen. Wenn Sie also die 688x320 auf Ihrem Server haben möchten, müssen Sie eines der vorhandenen Plugins bearbeiten.

Wenn Sie Imagick installiert haben, können Sie Ihr Plugin in der Datei video-thumbnails.php in Zeile 325 ändern und mithilfe dieses Codes eine größere Version der Miniaturansicht erstellen:

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

und lassen Sie WordPress das kleinere Miniaturbild daraus generieren (Schneiden der Höhe). Stellen Sie sicher, dass Sie in Ihrem Imagick-Code unterschiedliche Bildgrößen für die verschiedenen Videoplattformen erstellen!

fischi
quelle
Ich denke, ich werde jetzt mit dem CSS-Fix beginnen. Es ist wirklich der einfachste / schnellste Weg, um meine Situation zu verbessern. Ich habe auch die WP-Kerndateien überprüft und es scheint, dass die Größenänderungsfunktion min () verwendet. um die minimale Breite / Höhe zu bestimmen und es gibt keine Haken, um dies zu ändern, so dass meine Bilder beim Hochladen nicht hochskaliert werden.
Evaqas
Es gibt einen Hook namens "image_resize_dimensions", mit dem Sie die Funktion ohne min () neu schreiben können.
Levi