Метод сжатия JPEG приводит к другому выводу, если на симуляторе против устройства - PullRequest
2 голосов
/ 04 мая 2020

Я пытался воспроизвести проблему с моим приложением, когда иногда изображение считается "размытым" пользователем. Я разыскал оригинальное изображение, которое имело эту проблему и все еще не могло воспроизвести это локально. То есть ... пока я не запустил точно такой же код на реальном устройстве против симулятора. Для воспроизведения я сделал проект со следующим фрагментом:

    func compressImage() {
        let fileURL = Bundle.main.url(forResource: "original", withExtension: "HEIC")!
        let imageData = try! Data(contentsOf: fileURL)
        print("Size of original is ", Double(imageData.count) / 1000.0)
        let image = UIImage(data: imageData)!
        let jpgData = image.jpegData(compressionQuality: 0.75)!
        print("Size of compressed is ", Double(jpgData.count) / 1000.0)
        let directory = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) as NSURL
        try! jpgData.write(to: directory.appendingPathComponent("output.jpg")!)
    }

Запускал этот код на симуляторах для iPhone 11 Pro 13.4, iPhone 11 Pro 13.4 и iPhone 7+ 13.4

Size of original is  518.901
Size of compressed is  567.656

Затем я запустил это на физических устройствах с точно такими же версиями моделей / iOS и получил:

Size of original is  518.901
Size of compressed is  458.201

Так что размеры файлов совершенно разные. В сравнении выходных фотографий они тоже разные. Тонкие, но разные с точки зрения цветового пространства и размытости.

Сим: https://imgur.com/NZDKUlH Телефон: https://imgur.com/uAPwCvI

Разница может показаться незначительной, но если вы загрузите их и быстро переключитесь между ними, вы увидите разницу. И для моего конкретного применения один находится вне допустимого диапазона.

Так чего мне здесь не хватает? Почему один и тот же код должен давать разные результаты? Я двигаюсь вперед, используя только реальное устройство для проверки качества, но теперь я беспокоюсь о своих методах и задаюсь вопросом, стоит ли мне вместо этого выполнять сжатие с помощью lib или на бэкэнде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...