3

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

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

谢谢,-r

4

4 回答 4

3

不,您对此无能为力(当然,除了不使用 JPEG 2000)。JPEG 2000 需要比普通 JPEG 文件更多的 CPU 能力来编码和解码。所以即使包括第三方解码器也可能不会带来巨大的改进。

于 2012-07-05T20:42:25.200 回答
1

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

于 2013-11-03T17:03:28.730 回答
0

这里提到的一切都有些真实。然而,JPEG2000 的一些实现在整个编码/解码过程中比标准 JPEG 编码器/解码器更快。他们通过过多的多线程和 NEON 加速来实现这一点。

查看http://kakadusoftware.com/https://groups.yahoo.com/neo/groups/kakadu_jpeg2000/conversations/messages 了解更多详情。图书馆是商业的。有商业版本和个人/非商业版本。有相当多的努力来为 iOS 实现它。顺便说一句:Apple 仅通过此 API 为 Quicktime 和 Mac 提供 JPEG2000 支持。在一定程度上也是iOS。

于 2015-03-26T13:01:03.413 回答
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 冻结)

于 2019-08-28T12:58:59.920 回答