【问题标题】:how can I check if image downloaded is corrupted or not in iOS app?如何检查下载的图像是否在 iOS 应用程序中损坏?
【发布时间】:2012-03-25 17:46:45
【问题描述】:

我有一个 iPhone 应用程序,它可以根据需要下载照片,效果很好,但有时文件会被保存,并且只有部分图像会显示,其余部分显示为灰色。例如,前 25% 将是实际图像,而后 75% 将是灰色的。

这是我下载图像的代码,我假设响应代码 200 表示请求已正确完成。

   ASIHTTPRequest *requestl = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:URLLarge]];
        [requestl startSynchronous];
        if ([requestl responseStatusCode]==200) {
            NSData *responseData = [requestl responseData];
            NSError *writeError = nil;
            [responseData writeToFile:savePathLarge options:NSDataWritingFileProtectionNone error:&writeError];
            if (writeError !=nil) {
                NSLog(@"\n\n Write returned error: %@ \n\n", [writeError localizedDescription]);
            }
}

从这个[https://stackoverflow.com/questions/5699645/can-i-check-if-downloaded-image-is-corrupt-or-not-before-saving] 问题中说,如果我尝试在 UIImageView 中加载此图像并且它不加载此图像已损坏,但我的图像将以这种损坏的格式加载而不会出现问题,因此解决方案不适用于我。

【问题讨论】:

  • 您是否尝试过创建NSImage 并在其上调用isValid
  • 据我所知,如果损坏很微妙,iOS 图像 API 都不会帮助您。我认为您需要查看下载过程并尝试找出下载提前终止的时间。例如,检查 Content-Length 标头并确保您获得所有字节。不幸的是,我对 ASIHTTPRequest 了解得不够多,不知道它如何处理错误和提前终止。
  • 同意@EricS。您可以通过在加载时对 url 进行 NSLogging 来仔细检查是否是 Web 服务的问题。当您看到丑陋的图像时,将记录的 url 复制/粘贴到浏览器中,看看它是否在那里看起来很糟糕。

标签: iphone objective-c ios asihttprequest


【解决方案1】:

如果这种情况经常发生,则您可能在下载图像时遇到问题,或者服务器存在问题。但是还是

一种方法是在设备上生成图像的 MD5 哈希,然后尝试将其与存储在服务器上的图像的哈希进行比较。如果它们不匹配,那么您就知道出了点问题。

您可能需要自己的服务器来执行此操作,您可以轻松编写一个 PHP 脚本来为您执行此操作(应该是在线指南),如果脚本与图像位于同一台服务器上会更好(但你没有提到它是否是你自己的服务器)

【讨论】:

    猜你喜欢
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    相关资源
    最近更新 更多