下载和保存可以为空白的图像
Posted
技术标签:
【中文标题】下载和保存可以为空白的图像【英文标题】:Downloading and Saving an image that can be blank 【发布时间】:2010-11-07 18:19:00 【问题描述】:我正在使用 NSURLConnection 从网络下载并保存雷达图像(.gif 格式)。在 connectionDidFinishLoading: 方法中,我使用 [UIImage imageWithData:] 创建了一个图像。
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
// Problem is here. mutableData declared earlier.
UIImage *baseImage = [UIImage imageWithData:mutableData];
if (baseImage)
// do stuff with image
[mutableData release];
问题是我正在下载的图像有时是空白的并且背景清晰。这不是图像中的错误(有时雷达上没有任何东西可以返回)。但是当这种情况发生时,我在控制台中收到了这个错误。当图像的像素数非常少(1 或 2)时,也会出现此错误。
Error: ImageIO: malformed GIF frame#0 (600 x 550)
发生错误时,创建的图像为零。 600x550 是我正在下载的图像的像素大小。所以返回的图片是 nil,看起来下载失败了。
值得注意的是,baseImage 可能在 2 种情况下失败,一种是上面提到的,另一种是当我下载服务器上列出但实际上还没有的图像时。在第二种情况下, mutableData 包含一个错误字符串。我仍然需要第二种情况失败,所以我知道图像没有成功下载。
在这种情况下我需要做的实际上是创建空白图像并保存它,以便用户能够看到下载正确执行。
有什么想法吗?
谢谢, 罗斯
【问题讨论】:
为了提供更多信息,我将附上一张图片样本。我基本上需要一种从中制作 UIImage 的方法。此图像并非完全空白(有 1 个像素),但仍然失败。 (files.me.com/ross.kimes/6cuagt) 【参考方案1】:使用此代码:
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://files.me.com/ross.kimes/6cuagt"]];
UIImage *image = [UIImage imageWithData:data];
NSLog(@"%@", image);
恐怕我在控制台和有效的 UIImage 对象中没有错误:(
我想您可以检测到 string= 的存在 - 即 NSSTring stringWithData:encoding: - 如果它是有效字符串并且图像为 nil,您可能会认为它是错误消息?
【讨论】:
您没有收到任何错误的事实让我了解了问题所在。我在 iPad 和 iPhone 上都使用 ios 4.2。使用您上面的代码,它对我来说失败了。在模拟器中使用 4.1 进行尝试时,它运行良好。我要去向朋友借一个4.1的设备确认一下。谢谢! 在这种情况下,是否值得向苹果提交错误报告 - 显然 4.1 和 4.2 之间发生了一些变化,这使得情况变得更糟,你有一个不错的小测试用例 :) 是的,我一看到问题就发了一个。我在 4.1 设备上进行了测试,可以确认这是问题所在。希望我能在几周前发现这个问题,这样它就有机会在 4.2 公开之前得到修复。那好吧。再次感谢您的帮助。【参考方案2】:也许你可以尝试这样的事情:
@try
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://files.me.com/ross.kimes/6cuagt"]];
UIImage *image = [UIImage imageWithData:data];
@catch (NSException *ex)
//Something goes wrong, create the image
【讨论】:
以上是关于下载和保存可以为空白的图像的主要内容,如果未能解决你的问题,请参考以下文章
MATLAB矩阵保存为图像问题,为啥保存图像为空白? RGB值为255。