WebP编码的数据加载超过30秒

时间:2019-10-24 18:24:43

标签: ios swift image webp

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吗?我应该压缩吗?还是我做错了什么?

1 个答案:

答案 0 :(得分:0)

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

  

直接从相机拍摄图片

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

建议可以是这样的:

  1. 尝试使用诸如compressionQuality之类的选项,成本较高 更多的时间,但是压缩更多。默认情况下,它是1.0,这是最大的,也是最耗时的。
  2. 尝试预缩放原始图像。对于Photos Libraray中的图像,您始终可以使用API​​来控制尺寸。或者,您可以使用SDWebImage的transform方法,例如-th:data=${url}
  3. 在后台线程中进行所有编码,不要阻塞主线程
  4. 如果所有这些都不适合,更好的解决方案是使用JPEG和PNG格式而不是WebP。然后,在图像服务器端代码上,将JPEG / PNG转换为WebP。服务器端处理始终是解决问题的最佳方法。

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

https://github.com/dreampiggy/ModernImageFormatBenchmark