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?
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:
--enable-exif
flag konfigurieren.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;
}