2011-07-14 9 views
13

मैं कैमरा रोल में छवियों को सहेजने के लिए writeImageToSavedPhotosAlbum:metadata:completionBlock: का उपयोग कर रहा हूं (जीपीएस डेटा मेटाडेटा में पास किया गया शब्दकोश में है)। हालांकि चित्रों को गलत बताया गया है (क्योंकि चित्रों को लेते समय मैं डिवाइस को फ्लिप करता हूं)।आईफोन पर EXIF ​​(जीपीएस) और अभिविन्यास के साथ फोटो कैसे सहेजें?

एक और फ़ंक्शन लिखना है ImageToSavedPhotosAlbum: अभिविन्यास: समापनब्लॉक: लेकिन मैं EXIF ​​डेटा पास नहीं कर पाऊंगा।

प्रलेखन के अनुसार, मैन्युअल रूप से अभिविन्यास सेट करने के लिए kCGImagePropertyOrientation संपत्ति है लेकिन मुझे तस्वीर लेने और इसे सहेजते समय डिवाइस के वर्तमान अभिविन्यास का पता लगाने में समस्याएं आ रही हैं।

क्या किसी ने EXIF ​​डेटा और उचित अभिविन्यास के साथ तस्वीर सहेज लिया है? किसी भी मदद को बहुत सराहा जाएगा।

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
    image = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 
    [self dismissModalViewControllerAnimated:YES]; 
    [imageView setImage:image]; 

    if(sourceCamera) { 
     //EXIF and GPS metadata dictionary 
     (...) 

     //saving image 
     ALAssetsLibrary *al = [[ALAssetsLibrary alloc] init];  
     [al writeImageToSavedPhotosAlbum:[image CGImage] 
           metadata:dict 
         completionBlock:^(NSURL *assetURL, NSError *error) { 
          if (error == nil) { 
           NSLog(@"saved"); 
          } else { 
           NSLog(@"error"); 
          } 
     }];   
     [al release]; 
    } 
} 

शुभकामनाएं,

एक:

यहाँ मेरी कोड है।

उत्तर

27

kCGImagePropertyOrientation सेट करते समय आपको UIImageOrientation मानों को संबंधित EXIF ​​अभिविन्यास मानों को मैप करने की आवश्यकता है। यही कारण है कि मानचित्रण है:

UIImageOrientationUp:    1 
UIImageOrientationDown:   3 
UIImageOrientationLeft:   8 
UIImageOrientationRight:   6 
UIImageOrientationUpMirrored:  2 
UIImageOrientationDownMirrored: 4 
UIImageOrientationLeftMirrored: 5 
UIImageOrientationRightMirrored: 7 

ध्यान दें कि UIImageOrientationLeft और UIImageOrientationRight आप the documentation से उम्मीद कर सकते हैं क्या के विपरीत कर रहे हैं; छोटी नमूना छवियां होती हैं जो आप प्राप्त करते हैं यदि आप कच्चे छवि डेटा के अभिविन्यास के बजाय एक सीधे छवि पर अभिविन्यास लागू करते हैं जो अभिविन्यास लागू होने पर एक सीधी छवि प्रदान करेगा।

+0

उत्तर के लिए धन्यवाद, आप बहुत अच्छे हैं! UIImageOrientation, यह इतना आसान है ... kCGImagePropertyOrientation और UIImageOrientation के लिए कोई भी समाधान नहीं मिला। मुझे बस इस बोर्ड से प्यार है! – akashic

+0

एनोमी, जो समझ में आता है, लेकिन ओपी के कोड में वास्तव में सेटिंग क्यों करनी चाहिए, और कैसे? ओपी को वास्तव में कहीं भी केसीजी इमेजप्रॉपर्टीऑरिएंटेशन के लिए एक मूल्य निर्धारित करना है, है ना? –

+3

@ बेंजामिनहेलर को आपके 'अलास्सेट' के मेटाडेटा शब्दकोश को संशोधित करने की आवश्यकता है। एक बार आपके पास 'एलासेट' हो जाने के बाद, मेटाडेटा शब्दकोश इस तरह से प्राप्त करें: 'myMetadataDictionary = [[myAsset defaultReresentation] मेटाडाटा] '। फिर, अभिविन्यास सेट करें: 'myMetadataDictionary [(NSString *) kCGImagePropertyOrientation] = ओरिएंटेशन', जहां 'अभिविन्यास' उपरोक्त @ एनोमी द्वारा दिए गए पूर्णांक में से एक है। –

संबंधित मुद्दे