2012-12-02 7 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

उदाहरण धारीदार जा Sill कर सकते हैं यहां तक ​​कि अगर

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 जानकारी है, लेकिन

  • Datetime
  • DateTaken शामिल नहीं है
  • DateModified
  • डेटटाइम ओरिजिनल
  • दिनांकसमयडिजिटाईज्ड

आप वास्तव में अपनी रणनीति पर पुनर्विचार और FileDateTime साथ काम करने की जरूरत thats केवल जानकारी हूं अवगत हमेशा मौजूद

+1

फ़ाइलडेटाइम शायद फ़ाइल संशोधन समय केवल प्राप्त हो जाता है और (शायद) एक सिस्टम कमांड है। फोटोग्राफिक उपकरणों में हमेशा "तिथि ली गई" फ़ील्ड होती है और मुझे इसे पुनर्प्राप्त करने की आवश्यकता होती है। उपरोक्त फ़ंक्शन असम्बद्ध फ़ोटो के साथ पूरी तरह से ठीक (मेरी ज़रूरतों के लिए) काम करता है। जब मैं उन्हें फ़ोटोशॉप में संपादित करता हूं और उन्हें फिर से सहेजता हूं, तो फ़ंक्शन "दिनांक संशोधित" फ़ील्ड का उपयोग करता है। फ़ाइलों के पास अभी भी सही समय के साथ "तिथि ली गई" फ़ील्ड है, इसलिए इसे पुनर्प्राप्त करना निश्चित रूप से संभव है। – Dima

+0

फिर से सत्यापित करें ... मेरे पास 1000 से अधिक चित्रों का परीक्षण किया गया है ... एक सामान्य उदाहरण 'सैमसंग जीटी-एन 7000' मोबाइल फोन है, जिसमें केवल' डेटाटाइम, डेटटाइमऑरिगिनल, डेटटाइमडिजिटाइज्ड 'है। मुझे यकीन है कि आप आसानी से स्वयं को सत्यापित कर सकते हैं .. और कृपया ध्यान दें कि कुछ डिवाइस पर एक्फिफ़ जानकारी आसानी से स्विच की जा सकती है – Baba

2

दिनांक समय की जानकारी छवि फ़ाइल निर्देशिका (IFD) में मौजूद है जो एक आवर्ती डेटा संरचना के भीतर 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 वस्तु के रूप में प्रतिनिधित्व करने के लिए, आप सही आईएफडी अनुभाग से यह लाने की जरूरत है

is_null($takenDate); 
6

समाधान मैंने सोचा आसान है। मैं एक गलत टैग का जिक्र कर रहा था। उपयोग की जाने वाली तिथि प्राप्त करने के लिए:

$ exif_data ['DateTimeOriginal'];

11

ठीक है, मुझे पता है कि यह सवाल एक साल पहले पोस्ट किया गया था, लेकिन मुझे यह जवाब पोस्ट कर रहा है क्योंकि मेरे पास एक ही सवाल था और मेरे पति ने मुझे जवाब प्राप्त करने के बारे में एक चाल या दो दिखाया, तो मैं इसे साझा कर रहा हूँ। exif_read_data सरणी को मुद्रित करने के लिए एक php स्क्रिप्ट लिखें और आपको सभी प्रकार की रोचक जानकारी मिल जाएगी। यह (नीचे) print_r() का उपयोग कर stdout के लिए कमांड लाइन पर मुद्रित किया गया था।यदि आप नीचे स्क्रॉल करते हैं तो आपको दो बहुत ही रोचक कुंजी दिखाई देगी: [डेटटाइम] => 2011: 06: 21 17:50:57 और [डेटटाइम ओरिजिनल] => 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 
)