我的公司在通过获取 PHAsset 获取正确大小的元数据方面遇到了很大的问题。我们开发了一个 iOS 应用程序,允许客户从库中选择图片,获取每个图片的大小(以像素为单位),计算坐标以调整我们销售的小工具,然后将高质量的图片版本上传到我们的服务器以打印小工具。对于我们的一些客户,问题是发送的一些高质量版本的图片的像素大小与 PHAsset 对象给出的 pixelWidth 和 pixelHeight 不匹配。举个例子,我们有一张图片:
- PHAsset 对象报告为 2096x3724
- 但是,当请求全尺寸图像时,会生成 1536x2730 的图片
图片不在 iCloud 中,由运行 iOS 10.2 的 iPhone 6 SE 发送。这是获取全尺寸图像版本的代码:
PHImageRequestOptions *imgOpts = [[PHImageRequestOptions alloc] init];
imgOpts.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;
imgOpts.networkAccessAllowed = YES;
imgOpts.resizeMode = PHImageRequestOptionsResizeModeExact;
imgOpts.version = PHImageRequestOptionsVersionCurrent;
PHCachingImageManager *imageManager = [[PHCachingImageManager alloc] init];
[imageManager requestImageForAsset:imageAsset targetSize:PHImageManagerMaximumSize contentMode:PHImageContentModeDefault options:imgOpts resultHandler:^(UIImage * result, NSDictionary * info) {
NSData * imageData = UIImageJPEGRepresentation(result, 0.92f);
//UPLOAD OF imageData TO SERVER HERE
}]
也尝试使用 requestImageDataForAsset 方法,但没有运气:
PHImageRequestOptions *imgOpts = [[PHImageRequestOptions alloc] init];
imgOpts.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;
imgOpts.networkAccessAllowed = YES;
imgOpts.resizeMode = PHImageRequestOptionsResizeModeExact;
imgOpts.version = PHImageRequestOptionsVersionCurrent;
PHCachingImageManager *imageManager = [[PHCachingImageManager alloc] init];
[imageManager requestImageDataForAsset:imageAsset options:imgOpts resultHandler:^(NSData * imageData, NSString * dataUTI, UIImageOrientation orientation, NSDictionary * info) {
//UPLOAD OF imageData TO SERVER HERE
}]
在上传之前,从每张图片的高分辨率版本中获取精确尺寸对我们来说不是一个选项,因为从库中选择大量资产时会降低很多性能。
我们错过了还是做错了什么?有没有办法在不将全分辨率图像加载到内存的情况下以像素为单位获取资产大小?感谢您的帮助