wake-up-neo.com

Bild-EXIF-Informationen nach dem Komprimieren des Originalbilds beibehalten?

Nach dem Testen wurde mir klar, dass Word Press nach dem Hochladen von Bildern mittelgroße Bilder und Bilder in Miniaturgröße des Originalbilds erstellt ohne EXIF ​​/ IPTC-Informationen

Ich habe festgestellt, dass dies daran liegt, dass die Gd-Bildbibliothek auf meinem Host verwendet wird, und auf diese Weise funktioniert die Gd-Bibliothek standardmäßig. Entfernen Sie alle Bildinformationen.

Nach Recherchen habe ich herausgefunden, dass bei Verwendung von ImageMagick und der Erweiterung Imagick PHP anstelle der Gd-Bibliothek EXIF-Informationen (mit den Standardeinstellungen von ImageMagick) in generierten Bilddateien mit geänderter Größe beibehalten werden.


UPDATE 1

ImageMagick und die Erweiterung Imagick PHP sind jetzt auf meinem Host installiert. Jetzt behalten alle generierten Bilder EXIF ​​/ IPTC-Informationen (Original-, Mittel- und Miniaturbild, alle mit EXIF ​​/ IPTC-Daten).

Ich erlaube Besuchern, hochauflösende Bilder vor Ort hochzuladen, und in den meisten Fällen optimieren/komprimieren Besucher die Bilder vor dem Hochladen nicht und manchmal ist die Größe der Bilddatei ziemlich groß.

Zum Beispiel kann ein 12MP-Bild 10 MB groß sein, aber nach einer JPEG-Komprimierung von 85% kann die Dateigröße 2-3 mal kleiner sein, fast ohne merklichen Qualitätsverlust.

Ich habe diese Funktion in die Datei functions.php (mein Themenordner) gestellt, um das Originalbild während des Uploads zu komprimieren, Speicherplatz zu sparen und das Laden von hochauflösenden Bildern auf einer Seite damit zu beschleunigen.

// Image compression on upload, compress original image
function wt_handle_upload_callback( $data ) {
    $image_quality = 85; // 85% compression
    $file_path = $data['file'];
    $image = false;

    switch ( $data['type'] ) {
        case 'image/jpeg': {
            $image = imagecreatefromjpeg( $file_path );
            imagejpeg( $image, $file_path, $image_quality );
            break;          
        }

        case 'image/png': {
            $image = imagecreatefrompng( $file_path );
            imagepng( $image, $file_path, $image_quality );
            break;          
        }

        case 'image/gif': {         
            // Nothing to do
            break;
        }
    }

    return $data;
}
add_filter( 'wp_handle_upload', 'wt_handle_upload_callback' );

Es funktioniert einwandfrei, das Originalbild wird komprimiert, ABER diese Funktion entfernt EXIF ​​/ IPTC-Daten auf allen Bildern (ich muss EXIT beibehalten, zumindest auf dem Originalbild). Ohne obige Funktion enthalten die Originalbilder und alle Bilder mit geänderter Größe EXIF ​​/ IPTC-Daten (da ImageMagick installiert ist), das Originalbild wird jedoch nicht komprimiert als.

Wie zu beheben, passen Sie die Funktion oben an, um EXIF ​​zu halten?

UPDATE 2

WP 4.5 ist mit einigen Verbesserungen bei der Bildbearbeitung und der Option zum Beibehalten von Bild-EXIF-Daten (für den Fall, dass ImageMagic auf dem Host verwendet wird, in meinem Fall) veröffentlicht worden. WP 4.5 hat den neuen Filter "image_strip_meta" eingeführt, mit dem EXIF ​​für generierte Bilder mit geänderter Größe (Medium und Miniaturansichten) beibehalten oder entfernt werden kann.

Kann dieser Filter verwendet werden, um EXIF ​​im Originalbild zu belassen, wenn die obige Funktion für die Komprimierung des Originalbilds verwendet wird (wodurch alle EXIF-Daten aus dem Original entfernt werden und alle Versionen mit geänderter Bildgröße)?

Oder irgendetwas anderes, das dazu führt, dass das Originalbild direkt nach dem Hochladen komprimiert wird und EXIF ​​im Originalbild bleibt?

1
Advanced SEO

Das Problem ist, dass Sie Funktionen aus Gd library verwenden, um Bilder zu manipulieren, nicht Funktionen aus WordPress Image API (WP_Image_Editor class) . Also, WordPress Dinge gelten nicht für das generierte Bild von Ihrem Code.

Die WordPress Image API verwendet ImageMagick, falls verfügbar, ansonsten die Gd-Bibliothek.

So behalten Sie EXIF-Daten bei:

  1. Wenn die Gd-Bibliothek verwendet wird, müssen Sie PHP mit der EXIF-Erweiterung installieren und PHP mit --enable-exif flag konfigurieren.
  2. Wenn ImageMagick verfügbar ist, wird es von WordPress verwendet und EXIF ​​und andere Metadaten bleiben erhalten . Außerdem haben Sie Zugriff auf den image_strip_meta-Filter (nicht verfügbar, wenn die Gd-Bibliothek verwendet wird).

Da Sie ImageMagick installiert haben, können Sie es anstelle der Gd-Bibliothek verwenden. Oder, vielleicht besser, verwenden Sie die WordPress-API:

add_filter( 'wp_handle_upload', 'wt_handle_upload_callback' );
function wt_handle_upload_callback( $data ) {

    // get instance of WP_Image_Editor class
    $image = wp_get_image_editor( $data['file'] );

    if( ! is_wp_error( $image ) ) {
        $image->set_quality( 85 );
        $image->save( $data['file'], $data['type'] );
    }

    return $data;
}

Ich habe den obigen Code nicht getestet und ich glaube, Sie brauchen ihn nicht. Wenn die einzige Aufgabe darin besteht, das Bild zu komprimieren, müssen Sie wissen, dass das Bild bereits von WordPress auf eine Qualität von 82% komprimiert wurde ( 90 vor WP 4.5 ). Wenn Sie die Komprimierungsqualität ändern müssen, verwenden Sie einfach jpeg_quality filter :

add_filter( 'jpeg_quality', 'cyb_set_jpeg_quality' );
function cyb_set_jpeg_quality() {
    return 85;
}
2
cybmeta