2012-12-02 11 views
8

Pobieram datę utworzenia ze zdjęcia z funkcją PHP exif_read_data (zobacz poniższy kod). Daty pobrane ze zdjęć, które nie zostały zapisane zmodyfikowano zwrot "Data wykonania". Te, które zostały zmodyfikowane - "Data modyfikacji". Czy istnieje sposób, aby uzyskać datę zrobienia zdjęcia, ignorując pole "Data modyfikacji"?Uzyskiwanie "Zrobionej daty" zdjęcia zamiast "Zmodyfikowanej daty" z PHP exif_read_data

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

Dziękuję.

Edycja: Myślę, że $ exif_data ["DateTime"] używa pierwszego pola daty dostępnej. Ponieważ niezmodyfikowane obrazy miały tę samą wartość dla "Data modyfikacji" i "Data wykonania", zawsze zawierały w mojej sprawie "Data modyfikacji".

Odpowiedz

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"; 
} 
} 

wyjście wola

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 

źródło http://php.net/manual/en/function.exif-read-data.php

0

nie jestem pewien, skąd masz informacje, ale exif informacji zależy od obrazu lub przechwyconego urządzenia. Nawet jeśli jego zmodyfikowane Exif można parapet być rozłożony

Przykład

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 

Jest to ważny exif informacje, ale nie obejmuje

  • DateTime
  • DateTaken
  • DateModified
  • DateTimeOriginal
  • Przestrzeń kolorów

Naprawdę trzeba przemyśleć swoją strategię i pracować z FileDateTime ów jedyna informacja jestem świadomy zawsze obecny

+1

FileDateTime prawdopodobnie pobiera tylko czas modyfikacji pliku i (prawdopodobnie) jest poleceniem systemowym. Urządzenia fotograficzne mają zawsze pole "data wykonania" i muszę je odzyskać. Powyższa funkcja działa idealnie dobrze (dla moich potrzeb) z niezmodyfikowanymi zdjęciami. Kiedy edytuję je w Photoshopie i ponownie je zapisuję, funkcja używa pola "data modyfikacji". Pliki nadal mają pole "data wykonania" z właściwym czasem, więc możliwe jest odzyskanie go. – Dima

+0

Zweryfikuj ponownie ... Mam ponad 1000 zdjęć przetestowanych ... typowym przykładem jest telefon komórkowy "SAMSUNG GT-N7000", który ma tylko "Datetime, DateTimeOriginal, DateTimeDigitized" .. na pewno można łatwo zweryfikować, czy ... i pamiętaj, że informacje exif można łatwo włączyć na niektórych urządzeniach – Baba

2

DateTime informacji istnieje w katalogu pliku obrazu (IFD), który powtarzające struktura danych w ramach EXIF danych. Aby podjąć datę zdjęcie i reprezentować jako native php DateTime obiektu, trzeba sprowadzić go z prawej części 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 
} 

Po tym można sprawdzić poprawność danych EXIF ​​DateTime prostu:

is_null($takenDate); 
6

Rozwiązanie jest łatwiejsze niż myślałem. Miałem na myśli niewłaściwy tag. Aby pobrać datę, użyj:

$ exif_data ['DateTimeOriginal'];

11

Dobra, wiem, że to trochę za późno, ponieważ to pytanie zostało opublikowane rok temu, ale zamieszczam tę odpowiedź, ponieważ miałem to samo pytanie, a mój mąż pokazał mi sztuczkę lub dwie o tym, jak uzyskać odpowiedź, więc udostępniam to. Napisz skrypt php, aby wydrukować tablicę exif_read_data, a znajdziesz wiele interesujących informacji. To (poniżej) zostało wydrukowane w wierszu poleceń na standardowe wyjście za pomocą funkcji print_r().Jeśli przewiniesz w dół, zobaczysz dwa bardzo interesujące klucze: [DateTime] => 2011: 06: 21 17:50:57 i [DateTimeOriginal] => 2011: 06: 04 08:56:22

Mam nadzieję to pomoże ci uzyskać to, czego potrzebujesz.

 
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 
)