2012-12-02 22 views
8

exif_read_data PHP関数を使用して写真から作成日を取得しています(以下のコードを参照してください)。変更された "Date Taken"を返します。変更されたもの - 「日付が変更されました」。 「日付変更」フィールドを無視して、写真が撮影された日付を取得する方法はありますか?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 

これは

  • DateModified
  • 有効exif情報ですが、

    • 日時
    • DateTakenが含まれていません。 DateTimeOriginal
    • あなたが本当にあなたの戦略を再考し、 FileDateTimeで作業する必要が

    を日時DateTimeDigitized

  • は情報のみが常に存在

  • +1

    FileDateTimeはおそらくファイルの変更時刻のみを取得し、おそらくシステムコマンドです。 写真のデバイスには常に「撮影日」フィールドがあり、取得する必要があります。上記の機能は、修正されていない写真でも(自分のニーズに合わせて)完璧に機能します。 Photoshopで編集して保存し直すと、この関数は「日付変更」フィールドを使用します。ファイルには正しい時刻の "date taken"フィールドがまだあるので、確実に取得することができます。 – Dima

    +0

    もう一度確認してください...私は1000枚以上の写真をテストしています...典型的な例は 'Datetime、DateTimeOriginal、DateTimeDigitized'のみの' SAMSUNG GT-N7000'携帯電話です。 exif情報は一部のデバイスで簡単にオンに切り替えることができます – Baba

    2

    日時情報は、イメージファイルディレクトリ(IFD)内の定期的なデータ構造に意識が存在していますthatsのEXIFデータ。あなたは、単にEXIFの日付と時刻のデータを検証することができた後

    <?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 
    } 
    

    :写真の日付を取られ、ネイティブPHP DateTimeオブジェクトとして表し取得するには、右のIFDセクションからそれをフェッチする必要が

    is_null($takenDate); 
    
    6

    解決策は簡単だと思った。私は間違ったタグを指していた。使用された日付を取得するには:

    $ exif_data ['DateTimeOriginal'];

    11

    これは1年前にこの質問が投稿されたので、これはちょっと遅かったと知っていますが、私は同じ質問があったのでこの回答を投稿しています。私はそれを共有しています。 exif_read_data配列を出力するためのPHPスクリプトを作成すると、あらゆる種類の興味深い情報が見つかります。これはprint_r()を使ってコマンドラインでstdoutに出力されました。下にスクロールすると、2つの非常に興味深いキーが表示されます。 [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 
    ) 
    
    関連する問題