在系统应用里面的“照片”中,可以编辑图片选择裁剪或旋转角度。这个功能可能大家用得很少,所以在处理照片时没有遇到什么问题。今天发现经过系统工具裁剪或者旋转的图片在处理上需要注意一点:
将此图(PHAsset)转成UIImage:
- (PHImageRequestID)requestImageForAsset:(PHAsset *)asset targetSize:(CGSize)targetSize contentMode:(PHImageContentMode)contentMode options:(nullable PHImageRequestOptions *)options resultHandler:(void (^)(UIImage *__nullable result, NSDictionary *__nullable info))resultHandler;
在调用此方法时莫名其妙发现,该方法会回调两次。还没有确认第二次回调是否是编辑之前的原始图片。
并且得到UIImage之后无法再转为NSData对象。
NSData * __nullable UIImagePNGRepresentation(UIImage * __nonnull image);
NSData * __nullable UIImageJPEGRepresentation(UIImage * __nonnull image, CGFloat compressionQuality);
两个方法都将得到空值。并且报错:ImageIO: handle_error:349: zlib error
如果将此图转成NSData:
- (PHImageRequestID)requestImageDataForAsset:(PHAsset *)asset options:(nullable PHImageRequestOptions *)options resultHandler:(void(^)(NSData *__nullable imageData, NSString *__nullable dataUTI, UIImageOrientation orientation, NSDictionary *__nullable info))resultHandler;
将正常回调一次。并且imageData可以正常转换UIImage