我使用下面的代码从 PHAsset 获取原始图像:
PHImageRequestOptions *requestOptions = [[PHImageRequestOptions alloc] init];
requestOptions.resizeMode = PHImageRequestOptionsResizeModeNone;
requestOptions.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;
[[PHImageManager defaultManager] requestImageForAsset:phasset
targetSize:PHImageManagerMaximumSize
contentMode:PHImageContentModeDefault
options:requestOptions
resultHandler:^void(UIImage *image, NSDictionary *info) {
if (image) {
}
}];
但是发现,图像尺寸大于原始尺寸。我选择了 54 MB
文件,但在响应中发现其大小为 123.5MB
。
使用下面的代码来计算图像大小:
NSData *imgData = UIImageJPEGRepresentation(image, 1.0);
NSLog(@"img size: %@", [[NSByteCountFormatter new] stringFromByteCount:imgData.length]);
知道如何使用 [[PHImageManager defaultManager] requestImageForAsset:
API 获取原始图像。
最佳答案
我将在 Swift 5 中分享我的代码。 就我而言,以下代码在 iOS 14.5.1 上运行良好。
extension PHAsset {
func getImageData(_ index: Int, completionHandler: @escaping((_ index: Int, _ image: UIImage?)->Void)) {
let options = PHImageRequestOptions()
options.isSynchronous = true
options.isNetworkAccessAllowed = true
PHImageManager.default().requestImage(for: self, targetSize: PHImageManagerMaximumSize, contentMode: .aspectFit, options: options, resultHandler: { (image, info) in
completionHandler(index, image)
})
}
}
因为我在后台线程中调用 getImageData 并且返回值的顺序不正确,所以我使用一个名为index的变量来调用 order ,然后将其传递给completionHanlder,以便我可以知道返回值在哪里。 如果不需要索引变量,可以将其删除。
关于ios - 如何使用 PHImageManager 获取原始图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56338800/