为了账号安全,请及时绑定邮箱和手机立即绑定

iOS对图像损坏错误:<Error>:ImageIO的处理方法

iOS对图像损坏错误:<Error>:ImageIO的处理方法

扬帆大鱼 2019-04-14 09:53:17
在网络不好时,可能请求的图片数据不完整,这时候在imageView展示图片时,因为发现PNG图片不完全正确,所以早console里报错,如下::ImageIO:PNGIDAT:invalidstoredblocklengths但这个不是运行时异常,不知道该怎么捕获,从而进行例如重新请求等操作。求解该怎么做?
查看完整描述

2 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

真是功夫不负有心人,在各种stackoverflow和google无解之后,我自己读了UIImage、UIImageView以及ImageIO的源码和官方说明,找到了个取巧的办法,你需要写下面两步代码:
1.读取图片数据,然后调用2中的方法进行校验
NSData*data=[NSDatadataWithContentsOfFile:imagePath];
2.判断是否为有效的PNG图片,JPG的请使用UIImageJPEGRepresentation方法
/**
*校验图片是否为有效的PNG图片
*
*@paramimageData图片文件直接得到的NSData对象
*
*@return是否为有效的PNG图片
*/
-(BOOL)isValidPNGByImageData:(NSData*)imageData
{
UIImage*image=[UIImageimageWithData:imageData];
//第一种情况:通过[UIImageimageWithData:data];直接生成图片时,如果image为nil,那么imageData一定是无效的
if(image==nil&&imageData!=nil){
returnNO;
}
//第二种情况:图片有部分是OK的,但是有部分坏掉了,它将通过第一步校验,那么就要用下面这个方法了。将图片转换成PNG的数据,如果PNG数据能正确生成,那么这个图片就是完整OK的,如果不能,那么说明图片有损坏
NSData*tempData=UIImagePNGRepresentation(image);
if(tempData==nil){
returnNO;
}else{
returnYES;
}
}
真是眼泪都留下来了!~
                            
查看完整回答
反对 回复 2019-04-14
  • 2 回答
  • 0 关注
  • 766 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号