Using ALAssetsLibrary and ALAsset take out Image as NSData
13,766
ALAssetsLibrary *assetLibrary=[[ALAssetsLibrary alloc] init];
[assetLibrary assetForURL:[[self.imagedata objectAtIndex:i] resultBlock:^(ALAsset *asset)
{
ALAssetRepresentation *rep = [asset defaultRepresentation];
Byte *buffer = (Byte*)malloc(rep.size);
NSUInteger buffered = [rep getBytes:buffer fromOffset:0.0 length:rep.size error:nil];
NSData *data = [NSData dataWithBytesNoCopy:buffer length:buffered freeWhenDone:YES];//this is NSData may be what you want
[data writeToFile:photoFile atomically:YES];//you can save image later
}
failureBlock:^(NSError *err) {
NSLog(@"Error: %@",[err localizedDescription]);
}];
Related videos on Youtube
Comments
-
Shishir Shetty almost 2 years
I wish to extract the image using ALAssetsLibrary and ALAsset directly in the form of a NSData object.
Using a NSURL I take out the image in the following manner.
NSURL *referenceURL =newURL; ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; [library assetForURL:referenceURL resultBlock:^(ALAsset *asset) { UIImage *copyOfOriginalImage = [UIImage imageWithCGImage:[[asset defaultRepresentation] fullResolutionImage]]; }
Now here we take the image as a UIImage, but I need to take the image directly as NSData.
I wish to do this because (I have read that) once you take the image in UIImage, then we lose all the EXIF details of the Image.
That's the reason I want to extract the image directly as NSData, instead of doing this
NSData *webUploadData=UIImageJPEGRepresentation(copyOfOriginalImage, 0.5);
This step makes me lose all the EXIF details.
Please Help.
-
Shishir Shetty over 12 yearsThank you for your wonderful suggestion. But, is there any way I can compress the image ? Before using it as NSData.
-
HeikoG over 12 yearsIf I understand right, the image will already be compressed. The default presentation will probably be a jpeg or png
-
Nicolas Manzini over 10 yearsi have a problem with this technique while importing multiple ALAssets at the same tim, it seems as if the buffer gets reused for the next item.
-
dreampowder about 10 yearsthis answer is just fantastic! thanks for the code! The CGImage method also has a huge memory footprint compared to this method.
-
Pankaj Bhardwaj almost 9 yearsI have used this code to get GIF image, this works but not properly the animation state is not staying with the GIF image and its size get compressed,any other option will be useful.
-
maddy almost 9 years@PankajBhardwaj did you ever able to get succes in getting gif from alasset ?
-
Pankaj Bhardwaj almost 9 yearsNo @Alok not gif I got PNG and JPG , Even i have tried to save in document directory but still its just a image without animation.
-
maddy almost 9 yearsi have been able to do it successfully. will share code when on my mac.