Исключительный скрипт Joomla Photogallery: извлеките дату создания из EXIF ​​(фото), чтобы показать на веб-сайте

Не уверен, что это сработает, но так как Stackru - лучшее место, чтобы спросить, здесь мы идем:

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

Фотогалерея (компонент) работает слоями. Вы откроете веб-сайт и окажетесь в верхнем слое. Допустим, вы увидите 4 карты: 2012, 2013, 2014 и 2015. В этих топ-категориях вы можете добавлять бесконечные подкатегории, и в конце концов, есть фотографии, отображаемые на отдельных страницах с изображениями.

Пример встроенных категорий:
-Main (домашний сайт, в основном, высшая категория)
- 2015 (подкатегория)
--- январь (подкатегория подкатегории)
----- Image.jpg (отдельная страница с изображениями находится в подкатегории Январь)

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

Идея состоит в том, чтобы извлечь дату, когда фотография была сделана из EXIF-извлечения, и отобразить ее на отдельных страницах с изображениями.

Из того, что я мог найти, данные EXIF ​​извлекаются с помощью этого PHP-файла "функций". Кодовый сегмент: http://pastebin.com/hT40vJnj

Затем есть PHP-файл для отдельных страниц изображений. Следующий код показывается под каждой фотографией, а на дисплее есть пара вещей. Автор, некоторые технические вещи (разрешение, тип файла и размер файла), а также есть значок мыши, который показывает все извлеченные EXIF-данные в воздушном шаре. Даже дату, о которой я говорил, чтобы извлечь и быть в состоянии отбросить, где я хочу: http://pastebin.com/RzbjkP4e

ИЗОБРАЖЕНИЕ: EXIF ​​Balloon (https://stackru.com/images/9782801450ecd57ac2e5592937d587df435b28c1.png)

Следующая попытка (которая, вероятно, глупая), которую я уже попробовал, не сработала. Я просто попытался скопировать некоторый код из PHP-файла функций и попытался смешать его со следующим кодом в PHP-файле изображения:

echo '<i style="margin: 0 3px;cursor:default" class="icon-male dgtt-sw" title="'.JText::_('COM_DATSOGALLERY_EXIF_DATETIME').'"></i> '.strftime($ad_datef == 'customdate' ? $ad_datefc : $ad_datef, strtotime($exif_data['DateTimeOriginal'])).'<br />';
        }

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

echo '<i style="margin: 0 3px;cursor:default" class="icon-male dgtt-sw" title="'.JText::_('COM_DATSOGALLERY_INDIVIDUAL_AUTHOR').'"></i> '.$link.'<br />';
        }

Есть ли какой-нибудь простой способ придумать строку / код, который я могу использовать, чтобы показать дату, когда была сделана фотография? Или мне нужно копать глубже?

Спасибо!

1 ответ

Проблема в том, что ваша функция ищет только DateTimeOriginal.
К сожалению, не всегда это поле предоставляется камерой.
Другие возможные поля, которые вы можете использовать вместо DateTimeOriginal:

  • Datetime
  • Выбранная дата
  • Дата изменена
  • Доли секунд времени

Чтобы проверить все поля, которые у вас есть, используйте var_dump($exif_data);

Поэтому, чтобы расширить текущее поведение, вы должны изменить свой php-файл EXIF, заменив оператор $exif_data['DateTimeOriginal'] if (строки 28, 29, 30 в pastebin) следующим:

$date = '';
if (isset ($exif_data['DateTimeOriginal']) != '') {
    $date = $exif_data['DateTimeOriginal'];
} elseif (isset ($exif_data['DateTimeDigitized']) != '') {
    $date = $exif_data['DateTimeDigitized'];
} elseif (isset ($exif_data['DateTaken']) != '') {
    $date = $exif_data['DateTaken'];
} elseif (isset ($exif_data['DateModified']) != '') {
    $date = $exif_data['DateModified'];
} elseif (isset ($exif_data['Datetime']) != '') {
    $date = $exif_data['Datetime'];
}

if ($date != '') {
    $dg_exif .= JText::_('COM_DATSOGALLERY_EXIF_DATETIME').': <span>'. strftime($ad_datef == 'customdate' ? $ad_datefc : $ad_datef, strtotime($date)).'</span>';
}
Другие вопросы по тегам