Сохраняем EXIF при изменении изображения в плагине Taggallery для MaxSite CMS

Сохраняем EXIF при изменении изображения в плагине Taggallery для MaxSite CMS

5 января 2012 г. Sadovnik Просмотров: 253 RSS
MaxSite CMS плагины » Taggallery plugin , , ,

В 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:

  1.  // $full_path - полный путь к исходной картинке
  2.  if ($wotermark_type) // $wotermark_typ - тип наложения для библиотеки GD2
  3.  {
  4.   //каталог плагина галереи изображений
  5.   $plugin_dir = getinfo('plugins_dir') . 'taggallery/';
  6.  
  7.   // подключаем exif-библиотеку pel
  8.   require($plugin_dir . 'functions/exif/pel-0.9.1/PelJpeg.php');
  9.  
  10.   // получаем exif исхоного изображения
  11.   $image1 = new PelJpeg();
  12.   $image1->loadFile($full_path);
  13.   $exif = $image1->getExif();
  14.  
  15.   //Перед изменением создадим копию картинки для отката
  16.   if (file_exists($tmp_file_path)) unlink($tmp_file_path);
  17.   copy($full_path, $tmp_file_path);
  18.   $res_path = add_water_create_water($full_path , $wotermark_type , $userfile_water_file , $tmp_file_path);
  19.  
  20.   // сохраняем exif в новое изображение
  21.   $image2 = new PelJpeg();
  22.   $image2->loadFile($res_path);
  23.   $image2->setExif($exif);
  24.   file_put_contents($res_path, $image2->getBytes());
  25.   if ($res_path == $full_path) echo '<div class="update">Вотермарк наложена. Если не устраивает - произведите откат.</div>';
  26.   else echo '<div class="error">Ошибка создания Watermark.</div>';
  27.  }
Скачать обновленный плагин: taggallery23.zip
Похожие страницы
Оставьте комментарий!

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email. При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д., а также подписку на новые комментарии.

Авторизация: Авторизация MaxSite CMS. Facebook.

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

(обязательно)