Intereting Posts
Обнаружить страницу тега и включить изображение для этого конкретного тега Capitilize Alt / Title Tag в изображении HTML, изменение порядка HTML-вывода Пользовательский ходок для создания меню со встроенными раскрывающимися панелями Аутентификация группы Active Directory (AD) для просмотра сообщений WordPress? the_post_thumbnail не изменяет размер Сортировка массивов по пользовательской полевой дате Добавление данных в пользовательскую таблицу базы данных WordPress Вложение изображений в WordPress 3.9 Как локализовать admin.php только один раз Добавить кнопку, чтобы опубликовать страницу редактирования, когда post_status = publish Ограничить рекламные объявления Google на определенные сообщения в блоге Пользовательский тип индекса заказа Шаблон страницы настроек плагина Ограничение количества сообщений в WP_Query приводит к неожиданному результату Как установить параметр для всех сайтов в моей сети?

Сохранять изображение EXIF ​​после сжатия исходного изображения?

После тестирования я понял, что Word Press после загрузки изображения сделает средний и уменьшенный размер изображений оригинального изображения без информации EXIF ​​/ IPTC

Я понял, что это потому, что библиотека изображений GD используется на моем хосте, и именно так по умолчанию работает библиотека GD, вытесняет всю информацию об изображении.

После исследования выяснилось, что если ImageMagick и расширение Imagick PHP используются вместо GD-библиотеки, EXIF-информация будет сохранена (с настройками по умолчанию ImageMagick) в сгенерированных файлах с измененным размером.


ОБНОВЛЕНИЕ 1

ImageMagick и расширение Imagick PHP теперь установлены на моем хосте. Теперь все сгенерированные изображения сохраняют информацию EXIF ​​/ IPTC (исходное, среднее и уменьшенное изображение, все они имеют данные EXIF ​​/ IPTC).

Я разрешаю посетителям загружать приветственные изображения на сайт, и в большинстве случаев посетители не оптимизируют / не сжимают изображения перед загрузкой, а иногда и размер файла изображения довольно большой.

Например, изображение 12MP может быть 10 МБ, но после сжатия 85% JPEG размер файла может быть в 2-3 раза меньше, почти без заметной потери качества.

Я помещал эту функцию в файл functions.php (папка моей темы) для сжатия исходного изображения во время загрузки, для экономии места на диске и ускорения загрузки изображения приветствия на странице с ним.

// 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' ); 

Он отлично работает, оригинальное изображение сжато, НО эта функция удаляет данные EXIF ​​/ IPTC на всех изображениях (мне нужно сохранить EXIT, по крайней мере, на исходном изображении). Без функции выше оригинальные и все измененные изображения имеют данные EXIF ​​/ IPTC (поскольку установлен ImageMagick), но исходное изображение не сжато, чем.

Как исправить, настроить функцию выше, чтобы сохранить EXIF?

ОБНОВЛЕНИЕ 2

WP 4.5 обновляется с улучшенными улучшениями изображения, а также с возможностью сохранения данных EXIF ​​изображения (в случае, если ImageMagic используется на хосте, что в моем случае). WP 4.5 представил новый фильтр «image_strip_meta», который можно использовать для хранения или удаления EXIF ​​при генерируемых измененных изображениях (средний и миниатюрный).

Можно ли использовать этот фильтр для сохранения EXIF ​​в исходном изображении, если используется функция выше для сжатия оригинального изображения (которое удаляет все EXIF-данные из оригинальной и все измененной версии изображения)?

Или что-нибудь еще, что приведет к сжатию исходного изображения сразу после загрузки и сохранить EXIF ​​в исходном изображении?

Solutions Collecting From Web of "Сохранять изображение EXIF ​​после сжатия исходного изображения?"

Проблема заключается в том, что вы используете функции из библиотеки GD для управления изображениями, а не из функций WordPress Image API (класс WP_Image_Editor ) . Таким образом, WordPress не применим к сгенерированному изображению вашим кодом.

WordPress Image API использует ImageMagick, если он доступен, в противном случае он использует библиотеку GD.

Чтобы сохранить данные EXIF:

  1. Если используется библиотека GD, вам необходимо установить PHP с расширением EXIF и настроить PHP с помощью флага --enable-exif .
  2. Если доступен ImageMagick, WordPress будет использовать его, а EXIF и другие метаданные будут сохранены . Кроме того, у вас есть доступ к фильтру image_strip_meta (не доступно, если используется библиотека GD).

Поскольку у вас установлен ImageMagick, вы можете использовать его вместо библиотеки GD. Или, может быть, лучше, используйте 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; } 

Я не тестировал вышеуказанный код, и я думаю, что он вам не нужен. Если единственным занятием для всего этого является сжатие изображения, вы должны знать, что изображение уже сжато WordPress до 82% качества ( 90 до WP 4.5 ). Если вам нужно изменить качество сжатия, просто используйте фильтр jpeg_quality :

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

Вы не должны предполагать, что метаданные, связанные с изображением, выживают при манипулировании изображениями WordPress. Как вы узнали, это зависит от библиотеки обработки изображений, установленной на сервере, и фактически в версии 4.5 целью было бы удалить некоторые из них, как указано здесь. https://make.wordpress.org/core/2016/03/12 / performance-improvement-for-images-in-wordpress-4-5 / .

Если вам нужны метаданные как часть миниатюры (и я не понимаю, зачем вам это нужно), вы должны просто напрямую вызвать API обработки изображений php, а затем обновить WordPress DB, чтобы установить правильные поля, как если бы WordPress API (возможно, это может быть сделано с некоторыми фильтрами, не слишком сильно меняя общий процесс)