【发布时间】:2017-04-24 13:30:33
【问题描述】:
我的公司在通过获取 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
}]
在上传之前从每张图片的高分辨率版本中获取精确尺寸对我们来说不是一个选项,因为从库中选择大量资产时会大大降低性能。
我们是错过了还是做错了什么? 有没有办法在不将全分辨率图像加载到内存的情况下以像素为单位获取资产大小? 感谢您的帮助
【问题讨论】:
-
这方面有什么更新吗?我有完全相同的问题。
-
其实没有更新。经过多次测试,我们最终向我们的服务器发送了“假设大小”(PHAsset pixelWidth 和 pixelSize),上传后打开图片再次检查实际大小,然后根据实际大小调整坐标
-
苹果开发者论坛也没有人回答
-
我最终做了类似的事情,而不是像你的情况那样在后端做,我必须在应用程序端做,即在上传图片之前,获取最大尺寸,并检查图片尺寸 &上传前根据需要进行调整。
标签: ios objective-c phasset photokit phassetslibrary