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

时间:2015-03-16 14:17:08

标签: php date joomla exif photo-gallery

不确定这是否有效,但由于Stackoverflow是最好的地方,我们走了:

我安装了Joomla CMS,添加了一个自定义模板,添加了一个(付费)照相馆,经过各种调整后,这个东西运行得相当不错。

照相馆(组件)分层工作。您将打开该网站,您将进入顶层。假设您将看到4张地图:2012年,2013年,2014年和2015年。在这些顶级类别中,您可以添加无数的子类别,最后,还会有单张图像页面上显示的照片。

示例组合类别:
- 主要(主页,基本上是顶级类别)
- 2015(子类别)
--- 1月(子类别的子类别)
----- Image.jpg(位于1月子类别内的单个图像页面)

photogallery组件包含大量文件(主要是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 />';
        }

有没有简单的方法来提供一个字符串/代码,我可以用它来显示拍摄照片的日期?或者我需要深入挖掘?

非常感谢!

1 个答案:

答案 0 :(得分:0)

问题是你的功能正在寻找DateTimeOriginal 不幸的是,这个领域并不总是由相机提供 您可以使用的其他可能字段代替DateTimeOriginal:

  • 日期时间
  • DateTaken
  • DateModified
  • 数字化日期时间

要检查您使用的所有字段,请使用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>';
}