My **GMImagePickerController**
returns the list of selected images from photos app.
The code are as follows.
- (void)assetsPickerController:(GMImagePickerController *)picker didFinishPickingAssets:(NSArray *)assetArray
{
NSLog(@"%@",assetArray);
NSLog(@"GMImagePicker: User ended picking assets. Number of selected items is: %lu", (unsigned long)assetArray.count);
}
The assetArray return result like this, I selected 3 images from photos app
(
"<PHAsset: 0x7fa39e02e840> 1AEEF04A-F8AB-4019-AAB5- 2875CFD8F8E3/L0/001 mediaType=1/0, sourceType=1, (425x425), creationDate=2016-02-03 13:53:17 +0000, location=0, hidden=0, favorite=0 ",
"<PHAsset: 0x7fa39e02c840> 50489C13-55D0-4518-B290-B01B99D66996/L0/001 mediaType=1/0, sourceType=1, (425x335), creationDate=2016-02-03 13:53:08 +0000, location=0, hidden=0, favorite=0 ",
"<PHAsset: 0x7fa39e02c750> D0A466B2-9CF2-4FD9-A12F-07921A1D0E8F/L0/001 mediaType=1/0, sourceType=1, (425x365), creationDate=2016-02-03 13:53:04 +0000, location=0, hidden=0, favorite=0 "
)
Now the problem is I want to get OriginalImage
and mediaType
from above result to store image into document directory.
Please help me to solve this problem.
To check media type you can use the following property of phasset
if asset.mediaType == .image{
//do anything for image asset
}else if asset.mediaType == .video{
//do anything for video asset
}else if asset.mediaType == .audio{
//do anything for audio asset
}
To get the original image from PHAsset you can do the following:
let requestImageOption = PHImageRequestOptions()
requestImageOption.deliveryMode = PHImageRequestOptionsDeliveryMode.highQualityFormat
let manager = PHImageManager.default()
manager.requestImage(for: asset, targetSize: PHImageManagerMaximumSize, contentMode:PHImageContentMode.default, options: requestImageOption) { (image:UIImage?, _) in
// process the original image
}
NSLog(@"====%@====",assetArray);
for(int i=0;i<assetArray.count;i++)
{
self.requestOptions = [[PHImageRequestOptions alloc] init];
self.requestOptions.resizeMode = PHImageRequestOptionsResizeModeExact;
self.requestOptions.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;
// this one is key
self.requestOptions.synchronous = true;
// self.assets = [NSMutableArray arrayWithArray:assets];
PHImageManager *manager = [PHImageManager defaultManager];
Albumimages = [NSMutableArray arrayWithCapacity:[assetArray count]];
// assets contains PHAsset objects.
__block UIImage *ima;
for (PHAsset *asset in assetArray) {
// Do something with the asset
[manager requestImageForAsset:asset
targetSize:PHImageManagerMaximumSize
contentMode:PHImageContentModeDefault
options:self.requestOptions
resultHandler:^void(UIImage *image, NSDictionary *info) {
//retrive all images
ima = image;
}];
}
}
Using PHImageManager we can get full original image.
You can get the URL to the original file and check the content. With this, you can get EXIF data and all that stuff:
/* Get the URL of the source image in the Asset */
func getAssetURL(asset: PHAsset, completion: @escaping (_ url: URL?) -> Void) {
let options = PHContentEditingInputRequestOptions()
options.isNetworkAccessAllowed = false
asset.requestContentEditingInput(with: options, completionHandler: { (contentEditingInput, dictionary) in
completion(contentEditingInput?.fullSizeImageURL)
})
}
来源:https://stackoverflow.com/questions/35264023/how-to-get-original-image-and-media-type-from-phasset