WebP编码的数据加载30+秒

问题描述 投票:1回答:1

iOS版本:13.1iPhone: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个回答
0
投票
WebP]的编码速度很慢,与硬件加速的JPEG / PNG编码相比,它使用软件编码和VP8压缩算法(比较复杂)。 (Apple的SoC)。

直接来自相机的图片

在iPhone相机上拍摄的原始图像可能真的很模糊,例如4K分辨率。如果您不进行预缩放并尝试对其进行编码,则可能会花费更多时间。

建议可以像这样:

    尝试使用像compressionQuality这样的选项,成本较高更多的时间,但是压缩更多。默认情况下,它是1.0,这是最大的,也是最耗时的。
  1. 尝试预缩放原始图像。对于Photos Libraray中的图像,您始终可以使用API​​来控制尺寸。或者,您可以使用SDWebImage的转换方法,例如-[UIImage sd_resizedImage:]
  2. 在后台线程中进行所有编码,从不阻塞主线程
  3. 如果所有这些都不适合,更好的解决方案是使用JPEG和PNG格式而不是WebP。然后,在图像服务器端代码上,将JPEG / PNG转换为WebP。服务器端处理始终是解决此问题的最佳方法。
  • 如果您对真正的基准测试感兴趣,则与JPEG / PNG(硬件)和WebP(软件)相比。您可以在此处尝试使用我的基准代码演示,以帮助您做出决定。

    https://github.com/dreampiggy/ModernImageFormatBenchmark

  • © www.soinside.com 2019 - 2024. All rights reserved.