【问题标题】:WebP encodedData loads for 30+ secondsWebP 编码数据加载 30 多秒
【发布时间】:2020-02-21 03:16:15
【问题描述】:

iOS 版本:13.1 iPhone:X

我目前正在使用 DBAttachmentPickerController 从各种图像中进行选择,当我直接从相机拍照并尝试将其上传到我们的服务器时出现问题。 SDImageWebPCoder.shared.encodedData 的加载时间减少了大约 30 秒。 Android 应用程序中的相同图像大约需要 2-3 秒。

这是我使用的代码

let attachmentPickerController = DBAttachmentPickerController(finishPicking: { attachmentArray in
            self.images = attachmentArray
            var currrentImage = UIImage()
            self.images[0].loadOriginalImage(completion: { image in
                self.userImage.image = image
                currrentImage = image!
            })
            //We transform it to webP 
            let webpData = SDImageWebPCoder.shared.encodedData(with: currrentImage, format: .webP, options: nil)
            self.api.editImageUser(data: webpData!)
        }, cancel: nil)
        attachmentPickerController.mediaType = DBAttachmentMediaType.image
        attachmentPickerController.allowsSelectionFromOtherApps = true
        attachmentPickerController.present(on: self)

我应该更换正在使用的 Pod 吗?我应该压缩它吗?还是我做错了什么?

【问题讨论】:

    标签: ios swift image webp


    【解决方案1】:

    WebP 编码速度相对较慢,它使用软件编码和 VP8 压缩算法(复杂),与硬件加速的 JPEG/PNG 编码相比。 (Apple 的 SoC)。

    直接从相机拍照

    iPhone 相机拍摄的原始图像可能真的很有趣,比如 4K 分辨率。如果你不做一些预缩放并尝试对其进行编码,你可能会消耗更多的时间。

    建议可以是这样的:

    1. 尝试使用压缩质量等选项,成本越高 更多时间,但更多压缩。默认为 1.0,这是最高和最耗时的。
    2. 尝试对原始图像进行预缩放。对于来自 Photos Libraray 的图像,您始终可以使用 API 来控制大小。或者,您可以使用 SDWebImage 的转换方法,例如 - [UIImage sd_resizedImage:]。
    3. 在后台线程中进行所有编码,从不阻塞主线程
    4. 如果所有这些都不合适,更好的解决方案是使用JPEG和PNG格式而不是WebP。然后,在您的图像服务器端代码上,将 JPEG/PNG 转码为 WebP。服务器端处理总是最好的办法。

    如果您对与 JPEG/PNG(硬件)和 WebP(软件)相比的真正基准或其他内容感兴趣。您可以尝试在此处使用我的基准代码演示,以帮助您做出决定。

    https://github.com/dreampiggy/ModernImageFormatBenchmark

    【讨论】:

      猜你喜欢
      • 2017-06-29
      • 2013-10-08
      • 2016-01-26
      • 1970-01-01
      • 1970-01-01
      • 2020-08-30
      • 1970-01-01
      • 2019-09-07
      • 1970-01-01
      相关资源
      最近更新 更多