14

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

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

ありがとうございました。

編集: $exif_data['DateTime'] は最初に利用可能な日付フィールドを使用すると思います。変更されていない画像は「変更日」と「撮影日」の値が同じであるため、私の場合は常に「変更日」を取得していました。

4

5 に答える 5

11

解決策は私が思ったよりも簡単です。間違ったタグを参照していました。日付を取得するには、次を使用します。

$ exif_data ['DateTimeOriginal'];

于 2012-12-03T02:44:45.737 に答える
3
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

于 2012-12-02T22:04:50.593 に答える
2

どこで情報を入手したかはわかりませんが、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情報ですが、含まれていません

  • 日付時刻
  • 取得されたデータ
  • 日付が変更されました
  • DateTimeOriginal
  • DateTimeDigitized

あなたは本当にあなたの戦略を再考し、それを扱う必要がありますそれFileDateTimeは常に存在することを知っている唯一の情報です

于 2012-12-02T22:12:35.847 に答える
2

DateTime情報は、 EXIFデータ内の繰り返しデータ構造である画像ファイルディレクトリ(IFD)に存在します。写真の撮影日を取得し、ネイティブ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
}

その後、exifDateTimeデータを簡単に検証できます。

is_null( $takenDate );
于 2012-12-03T02:02:37.477 に答える