UIImage
छवि डेटा तो यह संपादित और प्रदर्शित किया जा सकता डीकोड, तो
UIImageWriteToSavedPhotosAlbum([UIImage imageWithContentsOfFile:[NSData dataWithContentsOfFile:[self getImagePath]]], self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
पहले चित्र को डीकोड होता है, और की तुलना में यह वापस UIImageWriteToSavedPhotosAlbum
विधि से सांकेतिक शब्दों में बदलना।
इसके बजाय, आप इस तरह ALAssetsLibrary/writeImageDataToSavedPhotosAlbum:metadata:completionBlock:, कुछ का उपयोग करना चाहिए:
ALAssetsLibrary *assetLib = [[[ALAssetsLibrary alloc] init] autorelease];
[assetLib writeImageDataToSavedPhotosAlbum:[self getImagePath] metadata:nil completionBlock:nil];
तुम भी मेटाडाटा और कॉल करने के लिए पूरा होने के ब्लॉक पारित कर सकते हैं।
संपादित करें:
[info objectForKey:@"UIImagePickerControllerOriginalImage"]
डीकोड UIImage
UIImagePickerController
से चयनित होते हैं:
छवि हो रही है। इसके बजाय आप
NSURL *assetURL = [info objectForKey:UIImagePickerControllerReferenceURL];
का उपयोग assetURL
आप अब ALAssetsLibrary/assetForURL:resultBlock:failureBlock: पद्धति का उपयोग करके इसके लिए ALAsset
प्राप्त कर सकते हैं का उपयोग करना चाहिए:
ALAssetsLibrary *assetLib = [[[ALAssetsLibrary alloc] init] autorelease];
[assetLib assetForURL:assetURL resultBlock:resultBlock failureBlock:failureBlock];
अब आप उस छवि के अनछुए NSData प्राप्त कर सकते हैं:
ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *asset){
ALAssetRepresentation *assetRep = [asset defaultRepresentation];
long long imageDataSize = [assetRepresentation size];
uint8_t* imageDataBytes = malloc(imageDataSize);
[assetRepresentation getBytes:imageDataBytes fromOffset:0 length:imageDataSize error:nil];
NSData *imageData = [NSData dataWithBytesNoCopy:imageDataBytes length:imageDataSize freeWhenDone:YES]; // you could for instance read data in smaller buffers and append them to your file instead of reading it all at once
// save it
[imgdata writeToFile:filePath atomically:NO];
};
ALAssetsLibraryAccessFailureBlock failureblock = ^(NSError *myerror){
NSLog(@"Cannot get image - %@",[myerror localizedDescription]);
//
};
मैंने कोड में कुछ गलतियां की हो सकती हैं, लेकिन चरण ऊपर सूचीबद्ध हैं। कुछ सही काम नहीं करने के मामले में, या यदि आप इसे थोड़ा और अधिक कुशल बनाना चाहते हैं, तो NSData
को ALAsset
से स्टैक ओवरफ्लो या अन्य साइटों पर पढ़ने के कई उदाहरण हैं।
हाँ, धन्यवाद, मुझे पहले से ही एसेट्स लाइब्रेरी के साथ उस चाल के बारे में पता चला है। मुझे आशा है कि आपका उत्तर दूसरों के लिए सहायक होगा। – Kai