我正在使用以下代码从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获取原始图像。
答案 0 :(得分:1)
我将在 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,以便我可以知道返回值的位置。 如果不需要索引变量,可以删除。
答案 1 :(得分:0)
使用以下代码获取原始图像。我在Swift
中有代码,您应该将其转换为Objective-C
PHImageManager.default().requestImage(for: phAssets.firstObject!, targetSize: PHImageManagerMaximumSize, contentMode: PHImageContentMode.default, options: requestOption) { (image, dictResult) in
// Get file path url of original image.
if let url = dictResult!["PHImageFileURLKey"] as? URL {
self.getImageFromFileUrl(url)
}
}
func getImageFromFileUrl(_ fileUrl: URL) {
// Get dat from url, here I have not using catch block, you must use it for swift.
let imageData = try? Data(contentsOf: fileUrl)
// Get image from data
let image = UIImage(data: imageData!)
// Size count, which is same as original image
let size = ByteCountFormatter()
print("image size = \(size.string(fromByteCount: Int64(imageData!.count)))")
}
有关详细信息,我在代码行上方添加了注释。
我希望这会对您有所帮助。
答案 2 :(得分:0)
我写了一个函数来获取下面的原始图像,它对我有用。希望它也适用于您。
func getAssetThumbnail(asset: PHAsset) -> UIImage {
let manager = PHImageManager.default()
let option = PHImageRequestOptions()
var thumbnail = UIImage()
option.isSynchronous = true
option.isNetworkAccessAllowed = true
option.resizeMode = .none
manager.requestImage(for: asset, targetSize: PHImageManagerMaximumSize, contentMode: .aspectFit, options: option) { (result, info) in
thumbnail = result!
}
return thumbnail
}