JPEG2000&的UIImage

时间:2012-07-05 19:40:08

标签: ios uiimage jpeg2000

我正在使用UIImage(UIImageView)比较Jpeg2000和Jpeg的显示速度,并注意到与Jpeg相比,显示Jpeg2000非常慢。

这是预期的,有没有办法加快速度?

谢谢, -r

4 个答案:

答案 0 :(得分:3)

不,你无能为力(除了不使用JPEG 2000)。与纯JPEG文件相比,JPEG 2000需要更多的CPU能力来进行解码和解码。所以即使包括第三方解码器也可能不会带来巨大的改进。

答案 1 :(得分:1)

您可以从JPEG 2000数据创建UIImage。解码过程将比解码JPEG慢,但一旦解码,在UIImageView中显示它应该与任何其他格式一样快。如果您有大量JPEG 2000图像,则可能需要在NSCache中缓存已解码的图像。

答案 2 :(得分:0)

这里提到的一切都是有道理的。然而,JPEG2000的实现对于整个编码/解码过程比标准JPEG编码器/解码器更快。他们通过过多的多线程和NEON加速来实现这一目标。

结帐http://kakadusoftware.com/https://groups.yahoo.com/neo/groups/kakadu_jpeg2000/conversations/messages 更多细节。图书馆是商业的。有个人/非商业的商业版本和商业版本。为iOS实现它有很多努力。 顺便说一句:Apple为Quicktime和Mac提供了这个API的JPEG2000支持。在某种程度上也是iOS。

答案 3 :(得分:0)

您可以将接收到的图像数据转换为.jpg格式,然后使用这种数据。

import Foundation
import UIKit
import SDWebImageWebPCoder

extension Data {
    var jpegData: Data? {
    var image: UIImage?
    image = UIImage(data: self) ?? SDImageWebPCoder.shared.decodedImage(with: self, options: nil)
    return image?.jpegData(compressionQuality: 1.0)
   }
}

如果您对使用WepP图像不感兴趣,则不能使用SDImageWepPCoder。 用法示例:

func loadImage(_ url: URL) {
    DispatchQueue.global(qos: .background).async { [weak self] in
        guard let data = try? Data(contentsOf: url) else {return}
        if let jpegData = data.jpegData {
            DispatchQueue.main.async {
                let displayingImage = UIImage(data: jpegData)
                yourImageView.image = displayingImage
            }
        }
    }
}

此决定可以让您在后台线程中将jp2数据转换为JPEG,然后照常使用(渲染速度快,且不会冻结UI)