如何检查是否下载的PNG图像是腐败?(How to check if downloaded PNG

2019-08-02 03:49发布

我从下面的代码下载多个图像,并保存到数据库中。 但对于一些图片我收到以下错误。

错误:ImageIO的网摘:无效的距离太远错误:ImageIO的:PNG不正确的数据检查

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);                               
dispatch_async(queue, ^{
    NSString *imgStr = [dict  objectForKey:@"image"];                  
    imgStr = [imgStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSData *imgData = [NSData dataWithContentsOfURL:[NSURL URLWithString:imgStr]];
    UIImage *image = [UIImage imageWithData:imgData];

    dispatch_sync(dispatch_get_main_queue(), ^{
       mYImageView.image = image;
    });
});

如何检查存储的图像是有效还是无效,这样我就可以再次下载图像?

Answer 1:

对于PNG图像,检查他们的前两个字节和最后两个字节。 下面是方法,希望它帮助。

谢谢。 :)

- (BOOL)isImageValid:(NSData *)data
{
    BOOL val = YES;

    if ([data length] < 4) 
        val = NO;

    const char * bytes = (const char *)[data bytes];

    if (bytes[0] != 0x89 || bytes[1] != 0x50) 
        val = NO;
    if (bytes[[data length] - 2] != 0x60 || 
        bytes[[data length] - 1] != 0x82) 
        val = NO;

    return val;
}


文章来源: How to check if downloaded PNG image is corrupt?