开发者社区> 问答> 正文

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

在网络不好时,可能请求的图片数据不完整,这时候在imageView展示图片时,因为发现PNG图片不完全正确,所以早console里报错,如下:

: ImageIO: PNG IDAT: invalid stored block lengths
但这个不是运行时异常,不知道该怎么捕获,从而进行例如重新请求等操作。求解该怎么做?

展开
收起
a123456678 2016-07-27 15:43:33 3317 0
1 条回答
写回答
取消 提交回答
  • 真是功夫不负有心人,在各种stackoverflow和google无解之后,我自己读了UIImage、UIImageView以及ImageIO的源码和官方说明,找到了个取巧的办法,你需要写下面两步代码:

    1.读取图片数据,然后调用2中的方法进行校验

    NSData* data = [NSData dataWithContentsOfFile:imagePath];
    2.判断是否为有效的PNG图片,JPG的请使用UIImageJPEGRepresentation方法

    /**

    • 校验图片是否为有效的PNG图片
      *
    • @param imageData 图片文件直接得到的NSData对象
      *
    • @return 是否为有效的PNG图片
      */
    • (BOOL)isValidPNGByImageData:(NSData*)imageData
      {
      UIImage* image = [UIImage imageWithData:imageData];
      //第一种情况:通过[UIImage imageWithData:data];直接生成图片时,如果image为nil,那么imageData一定是无效的
      if (image == nil && imageData != nil) {

         return NO;

      }

      //第二种情况:图片有部分是OK的,但是有部分坏掉了,它将通过第一步校验,那么就要用下面这个方法了。将图片转换成PNG的数据,如果PNG数据能正确生成,那么这个图片就是完整OK的,如果不能,那么说明图片有损坏
      NSData* tempData = UIImagePNGRepresentation(image);
      if (tempData == nil) {

         return NO;

      } else {

         return YES;

      }
      }

    真是眼泪都留下来了!~

    2019-07-17 20:00:43
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
手淘iOS性能优化探索 立即下载
From Java/Android to Swift iOS 立即下载
深入剖析iOS性能优化 立即下载