JPEG2000和UIImage

3

我正在比较使用UIImage(UIImageView)显示Jpeg2000和Jpeg的速度,并且注意到显示Jpeg2000要比Jpeg慢得多。

这是预期的吗?有没有方法可以加快显示速度呢?

谢谢, -r

4个回答

3

不,除了不使用JPEG 2000之外,您无法对此做任何事情。JPEG 2000需要比普通JPEG文件更多的CPU功率来进行编解码。因此,即使包括第三方解码器,也可能不会带来很大的改进。


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

0
这里提到的一切都有一定的真实性。然而,有些JPEG2000的实现比标准的JPEG编码器/解码器在整个编码/解码过程中更快。它们通过过度的多线程和NEON加速来实现。
请查看http://kakadusoftware.com/https://groups.yahoo.com/neo/groups/kakadu_jpeg2000/conversations/messages获取更多详细信息。这个库是商业化的。有商业版本和面向个人/非商业的版本。已经做了相当大的努力将其实现到iOS上。 顺便说一下:苹果仅通过Quicktime和Mac的API为JPEG2000提供支持。在某种程度上也支持iOS。

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冻结)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接