2012-12-02 118 views
8

我使用exif_read_data PHP函数从照片中检索创建日期(请参阅下面的代码。)从未从照片中检索的日期被修改后返回“拍摄日期”。那些已被修改 - “修改日期”。有没有办法让照片拍摄的日期,忽略“修改日期”字段?使用PHP获取照片的“拍摄日期”而不是“修改日期”exif_read_data

$exif_data = exif_read_data ($filename); 
if (!empty($exif_data['DateTime'])) { 
    $exif_date = $exif_data['DateTime']; 
} 

谢谢。

编辑:我认为$ exif_data ['DateTime']使用第一个可用日期字段。由于未经修改的图像对于“修改日期”和“拍摄日期”具有相同的值,因此在我的情况下总是检索“修改日期”。

回答

2
echo "test1.jpg:<br />\n"; 
$exif = exif_read_data('tests/test1.jpg', 'IFD0'); 
echo $exif===false ? "No header data found.<br />\n" : "Image contains headers<br />\n"; 

$exif = exif_read_data('tests/test2.jpg', 0, true); 
echo "test2.jpg:<br />\n"; 
foreach ($exif as $key => $section) { 
foreach ($section as $name => $val) { 
    echo "$key.$name: $val<br />\n"; 
} 
} 

将输出

test1.jpg: 
No header data found. 
test2.jpg: 
FILE.FileName: test2.jpg 
FILE.FileDateTime: 1017666176 
FILE.FileSize: 1240 
FILE.FileType: 2 
FILE.SectionsFound: ANY_TAG, IFD0, THUMBNAIL, COMMENT 
COMPUTED.html: width="1" height="1" 
COMPUTED.Height: 1 
COMPUTED.Width: 1 
COMPUTED.IsColor: 1 
COMPUTED.ByteOrderMotorola: 1 
COMPUTED.UserComment: Exif test image. 
COMPUTED.UserCommentEncoding: ASCII 
COMPUTED.Copyright: Photo (c) M.Boerger, Edited by M.Boerger. 
COMPUTED.Copyright.Photographer: Photo (c) M.Boerger 
COMPUTED.Copyright.Editor: Edited by M.Boerger. 
IFD0.Copyright: Photo (c) M.Boerger 
IFD0.UserComment: ASCII 
THUMBNAIL.JPEGInterchangeFormat: 134 
THUMBNAIL.JPEGInterchangeFormatLength: 523 
COMMENT.0: Comment #1. 
COMMENT.1: Comment #2. 
COMMENT.2: Comment #3end 
THUMBNAIL.JPEGInterchangeFormat: 134 
THUMBNAIL.Thumbnail.Height: 1 
THUMBNAIL.Thumbnail.Height: 1 

http://php.net/manual/en/function.exif-read-data.php

0

我不知道,你有你的信息,但exif信息是依赖于图像或捕获的设备上。即使其改性的EXIF可以窗台进行条带

array (size=7) 
    'FileName' => string 'img.jpg' (length=7) 
    'FileDateTime' => int 1332747844 
    'FileSize' => int 22569 
    'FileType' => int 2 
    'MimeType' => string 'image/jpeg' (length=10) 
    'SectionsFound' => string 'IFD0' (length=4) 
    'COMPUTED' => 
    array (size=5) 
     'html' => string 'width="338" height="506"' (length=24) 
     'Height' => int 506 
     'Width' => int 338 
     'IsColor' => int 1 
     'ByteOrderMotorola' => int 0 

这是一个有效exif的信息,但不包括

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

你真的需要重新思考自己的战略,并与FileDateTime工作,那是唯一的信息,我知道始终存在

+1

FileDateTime可能只获取文件修改时间,并且可能是系统命令。 摄影设备总是有“拍摄日期”字段,我需要检索它。上面的功能在未修改照片的情况下非常好(根据我的需要)。当我在Photoshop中编辑它们并重新保存它们时,该功能使用“修改日期”字段。文件仍然具有正确的时间“需要约会”字段,因此最终可以检索它。 – Dima

+0

再次验证...我有超过1000张图片经过测试...一个典型的例子是'SAMSUNG GT-N7000'手机它只有'Datetime,DateTimeOriginal,DateTimeDigitized' ..确定你可以轻松验证你的自我.. 。请注意,exif信息可以很容易地在某些设备上打开 – Baba

2

日期时间信息存在于图像文件目录(IFD),其内的一个反复出现的数据结构EXIF数据。若要拍摄照片的日期,并表示作为PHP DateTime对象,则需要从右侧IFD节取,

<?php 
$filename = "/path/to/your/image.jpg"; 
$exifData = exif_read_data($filename, 'IFD0'); 
$takenDate = NULL; 

if($exifData !== FALSE) { 
    if(array_key_exists('DateTime', $exifData)) { 
    $takenDate = new DateTime($exifData['DateTime']); 
    } else { 
    // No DateTime field available 
    } 

} else { 
    // No exif data available 
} 

之后,你可以简单地验证EXIF DateTime数据:

is_null($takenDate); 
6

我认为解决方案比较容易。我指的是错误的标签。使用日期:

$ exif_data ['DateTimeOriginal'];

11

好吧,我知道这个问题有点晚了,因为这个问题是在一年前发布的,但是我发布了这个答案,因为我有同样的问题,而且我的丈夫向我展示了一些关于如何获得答案的技巧,所以我分享它。 编写一个php脚本来打印出exif_read_data数组,你会发现各种有趣的信息。这(下面)是使用print_r()在命令行上输出到标准输出的。如果向下滚动,您将看到两个非常有趣的按键: [DateTime] => 2011:06:21 17:50:57和[DateTimeOriginal] => 2011:06:04 08:56:22

我希望这些将帮助你获得你所需要的东西。

 
Array 
(
    [FileName] => Pirate(F).JPG 
    [FileDateTime] => 1405733742 
    [FileSize] => 4017033 
    [FileType] => 2 
    [MimeType] => image/jpeg 
    [SectionsFound] => ANY_TAG, IFD0, THUMBNAIL, COMMENT, EXIF 
    [COMPUTED] => Array 
     (
      [html] => width="2592" height="3888" 
      [Height] => 3888 
      [Width] => 2592 
      [IsColor] => 1 
      [ByteOrderMotorola] => 1 
      [ApertureFNumber] => f/16.0 
      [Thumbnail.FileType] => 2 
      [Thumbnail.MimeType] => image/jpeg 
     ) 

    [Make] => Canon 
    [Model] => Canon EOS DIGITAL REBEL XS 
    [Orientation] => 1 
    [XResolution] => 4718592/65536 
    [YResolution] => 4718592/65536 
    [ResolutionUnit] => 2 
    [Software] => QuickTime 7.6.9 
    [DateTime] => 2011:06:21 17:50:57 
    [HostComputer] => Mac OS X 10.5.8 
    [YCbCrPositioning] => 1 
    [Exif_IFD_Pointer] => 260 
    [THUMBNAIL] => Array 
     (
      [Compression] => 6 
      [XResolution] => 4718592/65536 
      [YResolution] => 4718592/65536 
      [ResolutionUnit] => 2 
      [JPEGInterchangeFormat] => 628 
      [JPEGInterchangeFormatLength] => 4867 
      [YCbCrPositioning] => 1 
     ) 

    [COMMENT] => Array 
     (
      [0] => AppleMark 

     ) 

    [ExposureTime] => 1/200 
    [FNumber] => 16/1 
    [ExposureProgram] => 2 
    [ISOSpeedRatings] => 400 
    [ExifVersion] => 0220 
    [DateTimeOriginal] => 2011:06:04 08:56:22 
    [DateTimeDigitized] => 2011:06:04 08:56:22 
    [ShutterSpeedValue] => 499712/65536 
    [ApertureValue] => 524288/65536 
    [ExposureBiasValue] => 0/1 
    [MeteringMode] => 5 
    [Flash] => 9 
    [FocalLength] => 18/1 
    [ColorSpace] => 1 
) 
相关问题