如何从 PHAsset 获取原始图像和媒体类型?
Posted
技术标签:
【中文标题】如何从 PHAsset 获取原始图像和媒体类型?【英文标题】:How to get Original Image and media type from PHAsset? 【发布时间】:2016-02-08 07:05:22 【问题描述】:我的**GMImagePickerController**
从照片应用返回所选图像的列表。
代码如下。
- (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);
assetArray 返回结果是这样的,我从照片应用中选择了 3 张图片
(
"<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 "
)
现在的问题是我想从上面的结果中获取OriginalImage
和mediaType
以将图像存储到文档目录中。
请帮我解决这个问题。
【问题讨论】:
我认为你使用了错误的库,我检查了返回原始图像的github.com/guillermomuntaner/GMImagePicker 查看***.com/questions/32687403/… 将资产传递给资产管理器并检索信息。 查看***.com/questions/31670929/… 如何删除PHAsset中的图片? 【参考方案1】:要检查媒体类型,您可以使用 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
要从 PHAsset 获取原始图像,您可以执行以下操作:
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
【讨论】:
【参考方案2】: 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;
];
使用 PHImageManager 我们可以获得完整的原始图像。
【讨论】:
【参考方案3】:您可以获取原始文件的 URL 并检查内容。有了这个,您可以获得 EXIF 数据和所有这些东西:
/* 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)
)
【讨论】:
以上是关于如何从 PHAsset 获取原始图像和媒体类型?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 PHAsset 获取图像 URL?是不是可以使用 PHAsset URL 将图像保存到文档目录?
照片框架 - 如何从 PHAsset 获取图像的 CLLocation?
如何从 PHAsset for iOS 13 获取图像 url