WebP encodedData загружается более 30 секунд - PullRequest
1 голос
/ 24 октября 2019

Версия 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 голосов
/ 25 октября 2019

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

...