php - आईफोन स्ट्रिप्स exif डेटा से छवि अपलोड करें




jquery iphone (6)

मैंने एक वेबसाइट बनाई है जो छवि अपलोड करने की अनुमति देता है और एक बार छवि अपलोड होने के बाद, तस्वीर के बारे में कुछ विशिष्ट जानकारी प्रदर्शित होती है। कंप्यूटर से चित्र अपलोड करना ठीक काम करता है, समस्या तब आती है जब मैं एक स्मार्टफोन से एक छवि अपलोड करने की कोशिश कर रहा हूं। अपलोड सफलता लेकिन यह कंप्यूटर से अपलोड करते समय प्रदर्शित होने वाले डेटा का एक बड़ा हिस्सा प्रतीत होता है।

यह कोड अनुभाग वह है जो वास्तव में डेटा को पुनर्प्राप्त और प्रदर्शित करता है:

$location = $_FILES["pic"]["tmp_name"];
$data = exif_read_data($location);
var_dump($data);

var_dump($data) वास्तव में कंप्यूटर और स्मार्टफ़ोन में अलग-अलग डेटा डंप करता है।

संपादित करें: जाहिर है यह एंड्रॉइड स्मार्टफ़ोन के साथ ठीक काम करता है, समस्या तब होती है जब मैं आईफोन से छवियों को अपलोड करने का प्रयास करता हूं

उदाहरण के लिए, कंप्यूटर अपलोड से var_dump :

array(49) { 
    ["FileName"]=> string(10) "php2D4.tmp" 
    ["FileDateTime"]=> int(1367318152) 
    ["FileSize"]=> int(30357) 
    ["FileType"]=> int(2) 
    ["MimeType"]=> string(10) "image/jpeg" 
    ["SectionsFound"]=> string(24) "ANY_TAG, IFD0, EXIF, GPS" 
    ["COMPUTED"]=> array(6) { 
        ["html"]=> string(24) "width="320" height="240""  
        ["Height"]=> int(240)  
        ["Width"]=> int(320)  
        ["IsColor"]=> int(1)  
        ["ByteOrderMotorola"]=> int(1)  
        ["ApertureFNumber"]=> string(5) "f/2.8"  
    }  
    ["Make"]=> string(5) "Apple"  
    ["Model"]=> string(8) "iPhone 4"  
    ["Orientation"]=> int(3)  
    ["XResolution"]=> string(4) "72/1"  
    ["YResolution"]=> string(4) "72/1"  
    ["ResolutionUnit"]=> int(2)  
    ["Software"]=> string(5) "6.1.3"  
    ["DateTime"]=> string(19) "2013:04:26 23:57:43"  
    ["YCbCrPositioning"]=> int(1)  
    ["Exif_IFD_Pointer"]=> int(204)  
    ["GPS_IFD_Pointer"]=> int(594)  
    ["ExposureTime"]=> string(4) "1/15"  
    ["FNumber"]=> string(4) "14/5"  
    ["ExposureProgram"]=> int(2)  
    ["ISOSpeedRatings"]=> int(1000)  
    ["ExifVersion"]=> string(4) "0221"  
    ["DateTimeOriginal"]=> string(19) "2013:04:26 23:57:43"  
    ["DateTimeDigitized"]=> string(19) "2013:04:26 23:57:43"  
    ["ComponentsConfiguration"]=> string(4) ""  
    ["ShutterSpeedValue"]=> string(9) "4889/1250"  
    ["ApertureValue"]=> string(9) "4281/1441"  
    ["BrightnessValue"]=> string(10) "-3581/1451"  
    ["MeteringMode"]=> int(5)  
    ["Flash"]=> int(24)  
    ["FocalLength"]=> string(5) "77/20"  
    ["SubjectLocation"]=> array(4) {  
        [0]=> int(1295) 
        [1]=> int(967) 
        [2]=> int(699) 
        [3]=> int(696) 
    } 
    ["FlashPixVersion"]=> string(4) "0100" 
    ["ColorSpace"]=> int(1) 
    ["ExifImageWidth"]=> int(2592) 
    ["ExifImageLength"]=> int(1936) 
    ["SensingMethod"]=> int(2) 
    ["ExposureMode"]=> int(0) 
    ["WhiteBalance"]=> int(0) 
    ["FocalLengthIn35mmFilm"]=> int(35) 
    ["SceneCaptureType"]=> int(0) 
    ["GPSLatitudeRef"]=> string(1) "N" 
    ["GPSLatitude"]=> array(3) { 
        [0]=> string(4) "31/1" 
        [1]=> string(8) "5854/100" 
        [2]=> string(3) "0/1" 
    } 
    ["GPSLongitudeRef"]=> string(1) "E" 
    ["GPSLongitude"]=> array(3) { 
        [0]=> string(4) "34/1" 
        [1]=> string(8) "4684/100" 
        [2]=> string(3) "0/1" 
    } 
    ["GPSTimeStamp"]=> array(3) { 
        [0]=> string(4) "20/1" 
        [1]=> string(4) "57/1" 
        [2]=> string(8) "4272/100" 
    } 
    ["GPSImgDirectionRef"]=> string(1) "T" 
    ["GPSImgDirection"]=> string(9) "48089/465" 
}

स्मार्टफोन अपलोड से var_dump :

array(12) { 
    ["FileName"]=> string(9) "phpSzwfPw" 
    ["FileDateTime"]=> int(1367318054) 
    ["FileSize"]=> int(1778041) 
    ["FileType"]=> int(2) 
    ["MimeType"]=> string(10) "image/jpeg" 
    ["SectionsFound"]=> string(19) "ANY_TAG, IFD0, EXIF" 
    ["COMPUTED"]=> array(5) { 
        ["html"]=> string(26) "width="2592" height="1936"" 
        ["Height"]=> int(1936) 
        ["Width"]=> int(2592) 
        ["IsColor"]=> int(1) 
        ["ByteOrderMotorola"]=> int(1) 
    } 
    ["Orientation"]=> int(3) 
    ["Exif_IFD_Pointer"]=> int(38) 
    ["ColorSpace"]=> int(1) 
    ["ExifImageWidth"]=> int(2592) 
    ["ExifImageLength"]=> int(1936) 
}

यहां कंप्यूटर var_dump($_FILES) :

    array(1) 
{ ["pic"]=> array(5) 
{ ["name"]=> string(18) leaf2.JPG" 
["type"]=> string(10) "image/jpeg" 
["tmp_name"]=> string(14) "/tmp/phpzeDUs9"
 ["error"]=> int(0)
 ["size"]=> int(46439) } }

यहां आईफोन परिणाम var_dump($_FILES) :

    array(1) { ["pic"]=> array(5) 
{ ["name"]=> string(9) "image.jpg" 
["type"]=> string(10) "image/jpeg" 
["tmp_name"]=> string(14) "/tmp/phplPUZky" 
["error"]=> int(0) ["size"]=> int(1455577) } } 

संपादित करें: यहां अपलोड करने वाला फॉर्म HTML कोड है:

     <form action="results.php" id="upload-image" method="post" enctype="multipart/form-data">
         <div class="fileupload fileupload-new" data-provides="fileupload">
          <div class="fileupload-preview thumbnail" style="width: 200px; height: 150px;"></div>
          <div>
            <span class="btn btn-file"><span class="fileupload-new">Select image</span><span class="fileupload-exists">Change</span><input type="file" name="pic" id="pic" accept="image/*"/></span>
            <a href="#" class="btn fileupload-exists" data-dismiss="fileupload">Remove</a>
            <button type="submit" class="btn">Upload</button>
            </br>
            <span class="upload-error"></span>
          </div>
     </form>

इसका क्या कारण हो सकता है?


अगर तस्वीर को आईफोन से ईमेल किया गया है और मैक में सहेजा गया है, तो एक्सिफ डेटा संरक्षित है। यदि मैक पर इमेज कैप्चर के माध्यम से इसकी प्रतिलिपि बनाई गई है, तो एक्सिफ डेटा संरक्षित है। केवल अगर कैमरा भूमिका से किसी सेवा पर अपलोड किया गया है तो अपलोड के साथ डेटा नहीं भेजा गया है।


ऐप्पल से इस फीचर के बारे में कोई आधिकारिक वक्तव्य नहीं है, हालांकि ऐप्पल मंचों पर भी कई लोग इसके बारे में पूछ रहे हैं। असल में, नेट के आसपास की रिपोर्ट के बारे में, यह न केवल आईफोन से सफारी में अपलोड करने के लिए होता है, बल्कि ईमेल संलग्नक के लिए भी होता है।

हालांकि, यह स्पष्ट है कि इस से प्रभावित बहुत से लोग हैं। फ्लिकर एक प्रमुख शिकार प्रतीत होता है, लेकिन अन्य भी हैं।

सौभाग्य से, आजकल <input type="file"> टैग के लिए कच्चे फ़ाइल डेटा तक पहुंचने के तरीके हैं। यह आपको अपनी इच्छित EXIF ​​जानकारी लेने की अनुमति देता है, इसे एक छिपे हुए फॉर्म फ़ील्ड में रखता है, और इसे वास्तविक फ़ाइल अपलोड के साथ भेजता है। मैंने इस जवाब से एक jsfiddle अनुकूलित करने के लिए अनुकूलित किया कि मेरा क्या मतलब है:

देखो

अद्यतन: जावास्क्रिप्ट कोई मदद नहीं है

ऐसा लगता है कि वर्तमान-पीढ़ी के आईओएस उपकरणों पर वांछित प्रभाव नहीं है, क्योंकि FileReader एपीआई को केवल फ़ाइल के एक sanitized संस्करण तक पहुंच प्राप्त होती है


मुझे लगता है कि अब आईओएस के नए संस्करण (मैं बिल्कुल ठीक नहीं हूं) के साथ हल कर चुका हूं। मैं इस बारे में 100% निश्चित नहीं हो सकता।

मैंने हाल ही में देखा है कि इसने परीक्षण किए गए कुछ अलग-अलग iPhones पर काम करना शुरू कर दिया है जिनके पास आईओएस 9.2 स्थापित है।

तो यदि आप सभी iPhones को चाबुक कर सकते हैं और परीक्षण शुरू कर सकते हैं तो यह देखना अच्छा होगा कि यह हल हो गया है या नहीं।


मेरे पास एक आईफोन से कॉपी करने वाली एक ही समस्या है (विंडोज़ 7 मशीन (कई मशीनों पर भी कोशिश की गई) के लिए आईओएस / आईफोन कॉम्बो जो कुछ भी हो रहा है, उससे कोई फर्क नहीं पड़ता)। अगर मैं फोन से पीसी पर एक जेपीजी फ़ाइल कॉपी करता हूं तो चित्रों की एक बड़ी अल्पसंख्यक में उनकी EXIF ​​जानकारी गंभीर रूप से हटा दी जाती है। जब समय टिकटें और जीपीएस जानकारी भटक जाती है तो बहुत परेशान होता है। और भी अजीब बात यह है कि अगर मैं एमएस की पिक्चर गैलरी में जेपीजी देखता हूं और छवि की तारीख को अभी भी मौजूद है, तो मैं 'डेट ले लिया' पुनर्प्राप्त कर सकता हूं - तारीख को एक बार बदलें और फिर एक और तारीख को वापस दर्ज करें विंडोज एक्सप्लोरर के भीतर फाइल में फिर से दिखाई देने वाली स्टैंप ली जाएगी। यह अजीब व्यवहार के शीर्ष पर और अजीब व्यवहार है जो बूट करने के लिए बहुत परेशान है। पीजी फिक्स के बाद तक आपको छवियों या किसी अन्य संपादन पर किसी भी घूर्णन को नहीं करना चाहिए या आप उस तारीख से ली गई तारीख को पुनः प्राप्त नहीं कर पाएंगे।

अधिक जानकारी के लिए: मेरे पास आईट्यून्स इंस्टॉल नहीं हैं क्योंकि इससे अन्य गैर-संबंधित मुद्दों का कारण बनता है।

तो रिकैक करने के लिए - आईफोन एक पीसी से जुड़ा हुआ है, विंडोज एक्सप्लोरर के माध्यम से जेपीजी फाइलों की प्रतिलिपि बना रहा है और कुछ फाइलें जाहिर तौर पर अपनी EXIF ​​जानकारी खो देंगे।


मैंने अभी एक और ब्राउज़र, ओपेरा मिनी की कोशिश की, और यह काम किया! मेरे सभी exif डेटा मिला!


मोबाइल छवि अपलोड के लिए आईफोन 6 पर परीक्षण किया गया। आईफोन के लिए अभिविन्यास को पूरा करने के लिए। आपको दो प्रकार के छवि अपलोड के लिए तैयार होना चाहिए। फ्रंट कैमरा और बैक कैमरा। फ्रंट * सेल्फी कैमरे से अभिविन्यास प्राप्त करने के लिए आपको निम्न कार्य करना होगा। सबसे पहले छवि को अपने गंतव्य फ़ोल्डर में सर्वर पर संग्रहीत करें।

$image = imagecreatefromjpeg($source_url);
imagejpeg($image, $destination_url, $quality);

वहां से आप बनाई गई गंतव्य फ़ाइल से EXIF ​​पढ़ते हैं

$exif = exif_read_data($destination_url, 0, true);
    if(!empty($exif['IFD0']['Orientation'])) {
        //rotate accordingly
}

यह आपको तदनुसार घुमाने के लिए अभिविन्यास संख्या देगा। बैक कैमरे के लिए आप सीधे स्रोत यूआरएल से पढ़ सकते हैं। फ़ाइल अपलोड फॉर्म से पोस्ट की गई। पहले स्टोर करने के बिना EXIF ​​पढ़ें

$exif = exif_read_data($source_url);
    if(!empty($exif['Orientation'])) {
        //rotate accordingly
}




exif