WebP 编码的数据加载时间超过 30 秒
WebP encodedData loads for 30+ seconds
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 吗?我应该压缩它吗?还是我做错了什么?
WebP编码速度相对较慢,它使用软件编码和VP8压缩算法(复杂),相对于硬件加速JPEG/PNG编码。 (Apple 的 SoC)。
picture directly from the camera
iPhone 相机拍摄的原始图像可能真的很漂亮,像 4K 分辨率。如果你不做一些预缩放并尝试对其进行编码,你可能会消耗更多时间。
建议可以这样:
- 尽量使用压缩质量之类的选项,成本较高
更多时间,但压缩 more.By 默认为 1.0,这是最高和最耗时的。
- 尝试对原始图像进行预缩放。对于来自 Photos Libraray 的图像,您始终可以使用 API 来控制大小。或者,您可以使用 SDWebImage 的转换方法,如 -
[UIImage sd_resizedImage:]
.
- 在后台线程中完成所有编码,从不阻塞主线程
- 如果这些都不合适,更好的解决方案是使用JPEG和PNG格式而不是WebP。然后,在您的图像服务器端代码中,将 JPEG/PNG 转码为 WebP。服务器端处理永远是最好的主意。
如果您对与 JPEG/PNG(硬件)和 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 吗?我应该压缩它吗?还是我做错了什么?
WebP编码速度相对较慢,它使用软件编码和VP8压缩算法(复杂),相对于硬件加速JPEG/PNG编码。 (Apple 的 SoC)。
picture directly from the camera
iPhone 相机拍摄的原始图像可能真的很漂亮,像 4K 分辨率。如果你不做一些预缩放并尝试对其进行编码,你可能会消耗更多时间。
建议可以这样:
- 尽量使用压缩质量之类的选项,成本较高 更多时间,但压缩 more.By 默认为 1.0,这是最高和最耗时的。
- 尝试对原始图像进行预缩放。对于来自 Photos Libraray 的图像,您始终可以使用 API 来控制大小。或者,您可以使用 SDWebImage 的转换方法,如 -
[UIImage sd_resizedImage:]
. - 在后台线程中完成所有编码,从不阻塞主线程
- 如果这些都不合适,更好的解决方案是使用JPEG和PNG格式而不是WebP。然后,在您的图像服务器端代码中,将 JPEG/PNG 转码为 WebP。服务器端处理永远是最好的主意。
如果您对与 JPEG/PNG(硬件)和 WebP(软件)相比的真正基准测试或其他东西感兴趣。您可以在这里尝试使用我的基准代码演示,以帮助您做出决定。