繁体   English   中英

用PhotoKit提取时无法将UIImage转换为NSData

[英]Cannot convert UIImage to NSData when fetched with PhotoKit

我的情况是,我选择用PhotoKit从系统相册中提取并在UICollectionView的照片,并将所选的照片( UIImage )传递到下一个UIView ,然后以NSData形式发送到远程服务器。 但是,当我在发送跟踪NSData之前放置断点时,我发现UIImage数据具有分配的内存,而NSData没有。

这是获取UIImage的代码(请注意,我没有指定任何PHImageRequestOptions对象):

NSMutableArray *images = @[].mutableCopy;
PHImageManager *manager = [PHImageManager defaultManager];
PHAsset *asset = _photoPickerCollectionView.pickedAsset;
CGSize targetSize = CGSizeMake(asset.pixelWidth*0.5, asset.pixelHeight*0.5);
[manager requestImageForAsset:asset targetSize:targetSize contentMode:PHImageContentModeAspectFill options:nil resultHandler:^(UIImage *result, NSDictionary *info) {
    _nextView.pickedOne = result;
}];
[self.navigationController dismissViewControllerAnimated:YES completion:nil];

我这样将UIImage转换为NSData

UIImage *image = _pickedOne;
NSData *imgData = UIImageJPEGRepresentation(image, imageQuality);

当我跟踪变量时, UIImage包含以下数据:

在此处输入图片说明

NSDatanil如下:

在此处输入图片说明

什么是奇怪的是,如果我指定的PHImageRequestOptions为对象PHImageManager请求图像, NSData不会是nil 我不确定在有或没有PHImageRequestOptions情况下进行了哪些更改,以及为什么会有这种不同。

更新:我发现,如果将PHImageRequestOptions指定为nil那么默认选项将强制它异步获取照片,我认为这对于NSData可能是不稳定的,因此当我指定options.synchronous = YES; 它会工作。

但是在这种情况下,是否会导致任何保留周期或某些PhotoKit对象无法释放?

默认情况下,该方法是异步的。 您需要设置选项以显式使图像获取同步。 对于此类转换,我强烈建议使用以下API:

- (PHImageRequestID)requestImageDataForAsset:(PHAsset *)asset options:(nullable PHImageRequestOptions *)options resultHandler:(void(^)(NSData *__nullable imageData, NSString *__nullable dataUTI, UIImageOrientation orientation, NSDictionary *__nullable info))resultHandler;

这将直接返回数据,但您也必须使其同步。 这不会导致任何对象的保留周期。 希望这可以帮助。 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM