【问题标题】:Getting "JPEGDecompressSurface : Picture decode failed:" on creating UIImage from JPG raw data on iOS 10在 iOS 10 上从 JPG 原始数据创建 UIImage 时获取“JPEGDecompressSurface:图片解码失败:”
【发布时间】:2017-02-26 13:12:18
【问题描述】:

自从更新到 iOS 10 后,从 NSMutableData 创建 UIImage 时出现以下错误:

JPEGDecompressSurface : 图片解码失败:e000....."

没有产生奇怪或不正常的行为,但是当我调试我的应用程序时,我每次创建图像时都会看到错误。

这是代码,我使用 GCDAsynchSocket 类从下载的数据创建图像:

NSData *imgDataToGen = [NSData dataWithData:imgBuffer];
UIImage *img = [[UIImage alloc] initWithData:imgDataToGen];
[_delegate client:self didReceiveImage:img];

缓冲区imgBuffer 是一个NSMutableData-Object,它保存着下载的图像数据。下载完成后,数据将转换为图片并通过触发自定义委托方法传递给主 GUI。在主 GUI 中,图像在图像视图中设置。 处理完图像后,缓冲区将被清除。

我尝试了不同的方法,例如强制在后台线程中对 UIImage 进行解码,但我总是遇到同样的错误。图像总是以正确的方式呈现,所以我真的不明白错误信息。

我在iPhone 5ciOS 10.0.2 上试过,在Simulator 5s 上用iOS 9.210.0.2 试过。

iPhone 5c 我得到错误,在模拟器上没有。

我该如何解决这个错误,或者这种类型的错误可以忽略吗?

【问题讨论】:

  • 我也遇到了这个问题。你找到解决方法了吗?
  • 算上我——我也看到了同样的情况。
  • 我正在努力解决同样的问题(从 MOBOTIX 安全摄像头流式传输图像),有趣的是,虽然不是在所有设备上 - 你是否检查过 iOS 模拟器,当你跳过时你是否也得到了这个后台预解码?

标签: ios


【解决方案1】:

我遇到了同样的问题并解决了。 在我的情况下,我没有注意到,但是从 Data 到 UIImage 的转换和保存是在主线程中执行的,一旦我将它异步调度到具有后台 QOS 优先级的全局队列并且只刷新了我发送回来的 GUI UIImage到主队列,错误停止显示在调试器中。 希望对你有帮助。

例子:

fileprivate func downloadFromURL(urlString:String, callback:((_ image:UIImage?, _ error: Error?)->Void)?)   {
    var image: UIImage?
    guard let url = URL(string: urlString) else {
        callback!(nil, iError.RuntimeError(reason: "Wrong URL for image".localized))
        return
    }
    DispatchQueue.global(qos: .background).async {
        do {
            let data = try Data(contentsOf: url)
            image = UIImage(data: data)
            DispatchQueue.main.async {
                callback!(image,nil)
                return
            }

        } catch {
            print(error.localizedDescription)
            callback!(nil, iError.RuntimeError(reason: "Data error for image".localized))
            return

        }
    }
}

【讨论】:

  • 根据 ulmstefan 请求在原始帖子中添加示例
猜你喜欢
  • 2017-01-17
  • 2017-04-14
  • 1970-01-01
  • 1970-01-01
  • 2013-02-19
  • 1970-01-01
  • 1970-01-01
  • 2020-09-01
  • 2016-09-05
相关资源
最近更新 更多