2

以下のコードから複数の画像をダウンロードし、DB に保存しています。しかし、いくつかの画像では、エラーを下回っています。

エラー: ImageIO: PNG の無効な距離が遠すぎます エラー: 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;
    });
});

ここに画像の説明を入力

保存された画像が有効かどうかを確認して、画像を再度ダウンロードできるようにするにはどうすればよいですか?

4

2 に答える 2

9

PNG 画像の場合、最初の 2 バイトと最後の 2 バイトを確認します。以下にその方法を示します。お役に立てば幸いです。

ありがとう。:)

- (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;
}
于 2012-10-31T07:15:50.713 に答える