删除Joomla照片库脚本:从EXIF(照片)中提取创建日期以显示在网站上


Excisting Joomla Photogallery script: Extract creation date from EXIF (photo) to show on website

不确定这是否有效,但由于Stackoverflow是最好的提问地点,我们来看看:

我安装了一个Joomla CMS,添加了一个自定义模板,添加了一个(付费)照片库,经过各种调整,事情运行得相当不错。

照片库(组件)在图层中工作。您将打开网站,您将位于顶层。假设您将看到 4 张地图:2012 年、2013 年、2014 年和 2015 年。在这些顶级类别中,您可以添加无穷无尽的子类别,最后,有照片,显示在各个图像页面上。

示例构建类别:
-主要(主页网站,基本上是顶级类别)
-- 2015年(子类别)
1月---日(子类别的子类别)
-----图片.jpg(单个图片页面位于子类别 1 月内)

照片库组件由大量文件(主要是PHP)组成。由于我不是 PHP-pro(但我确实知道我的小方法),我试图弄清楚照片库组件在从其照片中读取 EXIF 数据时是如何工作的。

这个想法是从EXIF提取中提取照片的拍摄日期,并将其显示在各个图像页面上。

从我能找到的,EXIF数据是用这个"函数"PHP文件提取的。代码段:http://pastebin.com/hT40vJnj

然后,是各个图像页面的PHP文件。下一个代码显示在每张照片下方,并显示一些东西。作者,一些技术内容(分辨率,文件类型和文件大小),还有一个鼠标悬停图标,可以在气球中显示所有提取的EXIF数据。甚至我所说的日期提取并能够随心所欲地放置:http://pastebin.com/RzbjkP4e

图片:EXIF气球(i.stack.imgur.com/S7Njc.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 />';
        }

有没有简单的方法可以想出一个字符串/代码,我可以用来显示照片的拍摄日期?还是我需要更深入地挖掘?

非常感谢!

问题是您的函数只查找 DateTimeOriginal。
不幸的是,并非总是由相机提供此字段。
您可以使用其他可能字段代替日期时间原始字段是:

  • 日期时间
  • 拍摄日期
  • 修改日期
  • 日期时间数字化

要检查您使用的所有字段var_dump($exif_data);

因此,要扩展当前行为,您必须修改EXIF php文件,将$exif_data['DateTimeOriginal'] if语句(pastebin中的第28,29,30行)替换为:

$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>';
}