如何检查图片是否有效
例如,当我缓存一个仅下载了一半并失败的图像,且此图像为无效图像时,我想知道它是无效图像并重新下载。 (当我使用损坏的图像时,Xcode控制台会记录错误:ImageIO: PNG IDAT: CRC error)
因此,我想找到一种机制来检查各种JPEG、PNG等图像的有效性
有人有线索吗?
如何检查图片是否有效
例如,当我缓存一个仅下载了一半并失败的图像,且此图像为无效图像时,我想知道它是无效图像并重新下载。 (当我使用损坏的图像时,Xcode控制台会记录错误:ImageIO: PNG IDAT: CRC error)
因此,我想找到一种机制来检查各种JPEG、PNG等图像的有效性
有人有线索吗?
if (memcmp(img_bytes, "\211PNG", 4) != 0||OSReadBigInt64(img_bytes,(length - 8))!=5279712195050102914)
{
//Bad Data! Free your data and return or something
}
+ (UIImage *)imageWithData:(NSData *)data
和 + (UIImage *)imageWithContentsOfFile:(NSString *)path
。
执行nil检查的代码可能如下所示:UIImage *image = [UIImage imageWithContentsOfFile:pathToImage];
if (image) {
// The image was loaded. Display it
}
else {
// The image was not loaded. Redownload or display a placeholder, etc...
}
对于第二种失败情况,很可能是由于连接丢失导致的。对于这种情况,最好在 NSURLConnection 的代理中处理失败。当下载图像时,如果调用了 - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
,则应该丢弃请求的数据。
还要记住,didFailWithError:
不会针对服务器返回的 4xx 或 5xx 响应而被调用。它是在连接因其他原因被切断时被调用的。通常最好确保只有在服务器响应 200 OK 时才将图像数据写入磁盘。