Сохраняем EXIF при изменении изображения в плагине Taggallery для MaxSite CMS
Сохраняем EXIF при изменении изображения в плагине Taggallery для MaxSite CMS
В MaxSite CMS загружать изображения можно как при помощи встроенного загрузчика MaxSite CMS, так и плагина-файлового менеджера. EXIF данные исходного файла загружаются в файл, создаваемый на сервере.
Если изображения загружать без изменений, то EXIF данные можно извлекать из файла изображения на сервере.
Если же происходит изменение изображения (ресайз, наложение водной метки) - EXIF теряются.
Как предотвратить потерю EXIF при изменении изображения?
Почему, при наложении водной метки и ресайзе, теряются EXIF данные об изображении?
Все очень просто.
Для изменения размера или наложения воной метки используется библиотека GD2. При изменении исходного изображения, вместо исходного изображения - создается новое. В это новое изображение и записывается измененная картинка.
EXIF же данные никак не переносятся.
Зачем нужны EXIF данные?
Раньше EXIF данные никак не использовал и о проблемах с этим делом не ведал.
Использовать начал дату снимка в плагине галерей изображений Taggallery. В этом плагине о добавляемом изображении создается запись, содержащая целых три поля даты: дата добавления в БД, дата изменения файла, дата снимка.
В настройках плагина можно указать сортировку картинок (как в админке, так и при выводе галерей в альбомах) по любому из полей, в том числе и по любой дате. Кроме того, можно указать: какая дата выводится, как дата картинки.
Очевидно, что красивее всего выглядит именно дата снимка. А дата снимка находится именно в EXIF.
Но и тут проблем не возникало. Дело в том, что удобнее загружать уже уменьшенные до нужного размера изображения. Ресайз удобно делать такими программами, как: Office Picture Manager или XnView, в которых EXIF не теряется.
Проблема возникла, когда я решил проставить водные метки изображениям, для чего приделал к плагину галерей Taggalery утилиту Watermark для наложения водных меток. Эта утилита позволяет просмотреть все возможные варианты наложения, выбрать оптимальный вариант и откатить, если что.
И тут оказалось, что при наложении водной метки EXIF теряются.
Конечно можно сперва добавить картинку в БД, считав дату из EXIF - затем уже наложить watermark. Но это как-то некрасиво.
Сохраняем EXIF при ресайзе и наложении водной метки на изображение.
Порыв интернет я нашел несколько библиотек для работы с EXIF, но без сучка без задоринки заработала только одна: PEL (PHP Exif Library).
Архив с примерами и классом: http://sourceforge.net/projects/pel/.
Вот как прикрутил к утилите Watermark:
- // $full_path - полный путь к исходной картинке
- if ($wotermark_type) // $wotermark_typ - тип наложения для библиотеки GD2
- {
- //каталог плагина галереи изображений
- $plugin_dir = getinfo('plugins_dir') . 'taggallery/';
- // подключаем exif-библиотеку pel
- require($plugin_dir . 'functions/exif/pel-0.9.1/PelJpeg.php');
- // получаем exif исхоного изображения
- $image1 = new PelJpeg();
- $image1->loadFile($full_path);
- $exif = $image1->getExif();
- //Перед изменением создадим копию картинки для отката
- if (file_exists($tmp_file_path)) unlink($tmp_file_path);
- copy($full_path, $tmp_file_path);
- $res_path = add_water_create_water($full_path , $wotermark_type , $userfile_water_file , $tmp_file_path);
- // сохраняем exif в новое изображение
- $image2 = new PelJpeg();
- $image2->loadFile($res_path);
- $image2->setExif($exif);
- file_put_contents($res_path, $image2->getBytes());
- if ($res_path == $full_path) echo '<div class="update">Вотермарк наложена. Если не устраивает - произведите откат.</div>';
- else echo '<div class="error">Ошибка создания Watermark.</div>';
- }
Новая версия плагина галерей для MaxSite CMS Taggallery-2.1
Следующая версия. Скачать: taggallery21.zip Изменения: 1. При добавлении картинки в ...
Новая версия плагина галерей для MaxSite CMS Taggallery-2.2
Следующая версия. Скачать: taggallery22.zip Изменения: 1. Импорт из Picasa (Пример); 2. ...
Создание коллажа изображений в галерее изображений Taggallery на MaxSite CMS.

Логическое завершение серии компонентов: picture-links и header_collage. В админке ...
Плагин для MaxSite Taggallery-0.9

Предыдущий плагин выкинул и сделал заново, учитывая размышления в ...
Планирование модели галереи изображений для MaxSite CMS
Перед внесением дальнейших изменений в плагин галереи изображений TagGallery, ...










