2012-12-02 151 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 
) 
相關問題