iOS处理系统相册裁剪后图片

在iOS中,当用户使用系统相册编辑图片(如裁剪或旋转)后,处理这些图片时可能会遇到问题。转换PHAsset为UIImage时会发现方法被回调两次,且第二次回调可能是原始图片。此外,转成UIImage后再转回NSData会失败并出现'ImageIO: handle_error:349: zlib error'的错误。但直接将PHAsset转为NSData则能正常回调并进行UIImage的转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在系统应用里面的“照片”中,可以编辑图片选择裁剪或旋转角度。这个功能可能大家用得很少,所以在处理照片时没有遇到什么问题。今天发现经过系统工具裁剪或者旋转的图片在处理上需要注意一点:

将此图(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值