ios - 如何使用 PHImageManager 获取原始图像

标签 ios objective-c ios10 phasset phimagemanager

我使用下面的代码从 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/

相关文章:

ios - ffmpeg 在 iOS 中将 wma 转换为 mp3

ios - 无法使用 'sequence' 类型的参数列表调用 '([AnyObject])'

ios - 带字典的 JSON - 嵌套对象转换为字符串并显示

iphone - 当 UIButton 内容模式为 "center,"时背景图像被像素化

xcode - 我可以在 iOS 10 发布之前提交 iOS 10 应用程序以供审核吗?

ios - iOS 10/Xcode 8 设备上的 NSLog 似乎被截断了?为什么?

ios - iPad 的单独启动图像?

ios - 将 UIView 拖入 Storyboard 和以编程方式创建 UIView 之间的区别?

ios - iOS中的电话录音

ios:自定义 UITableViewCell 为空