web-dev-qa-db-ja.com

PHP exif_read_data)を使用して、「変更日」ではなく写真の「撮影日」を取得する

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

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

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

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

11
Dima

さて、この質問は1年前に投稿されたため、少し遅れていることはわかっていますが、同じ質問があり、夫が回答の取得方法について1つか2つのトリックを教えてくれたので、この回答を投稿しています。それ。 exif_read_data配列を出力するphpスクリプトを作成すると、あらゆる種類の興味深い情報が見つかります。これ(以下)は、print_r()を使用してstdoutへのコマンドラインで出力されました。下にスクロールすると、2つの非常に興味深いキーが表示されます:[DateTime] => 2011:06:2117: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 ] =>配列
(
 [html] => width = "2592" height = "3888" 
 [高さ] => 3888 
 [幅] = > 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 
 [ソフトウェア] => 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] =>アレイ
(
 [圧縮] => 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 
)
11
paidforbychrist

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

$ exif_data ['DateTimeOriginal'];

9
Dima

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 );
2
edigu
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

2
Marek Prymula

どこで情報を入手したかはわかりませんが、 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で作業する必要があります。それは、常に存在することを知っている唯一の情報です。

1
Baba