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