Я работаю над добавлением поддержки широкоформатных фотографий в iOS 10. Когда пользователь снимает фотографию с камеры, мне нужно использовать новый API, который поддерживает новое цветовое пространство для сохранения фотоданных - UIGraphicsImageRenderer
jpegData
вместо UIImageJPEGRepresentation
.Замена UIImageJPEGпредложение с помощью jpegData UIGraphicsImageRenderer
У меня проблемы с ориентацией изображения. Снимая фотографию на моем iPad в портрете, изображение рисуется неправильно. Смотрите комментарии ниже:
Старый API:
let image = info[UIImagePickerControllerOriginalImage] as! UIImage
let imageData = UIImageJPEGRepresentation(image, 1)
Новый API:
let image = info[UIImagePickerControllerOriginalImage] as! UIImage
let cgImage = image.cgImage!
let ciImage = CIImage(cgImage: cgImage)
let format = UIGraphicsImageRendererFormat()
format.scale = 1
format.prefersExtendedRange = true
let renderer = UIGraphicsImageRenderer(bounds: ciImage.extent, format: format)
let imageData = renderer.jpegData(withCompressionQuality: 1, actions: { context in
context.cgContext.draw(cgImage, in: ciImage.extent) //draws flipped horizontally
//image.draw(at: .zero) //draws rotated 90 degrees leaving black at bottom
//image.draw(in: ciImage.extent) //draws rotated 90 degrees stretching and compressing the image to fill the rect
})
Что такое правильный способ заменить UIImageJPEGRepresentation
с UIGraphicsImageRenderer
«s jpegData
?
Является ли это на самом деле весь код, используемый? Метод image.draw должен «рисовать все изображение в текущем графическом контексте, учитывая настройку ориентации изображения». По моему опыту, неоригинальные входные изображения всегда перерисовываются в данные с ориентированным ориентированным представлением при использовании рендерера без дополнительного преобразования координат. – HuaTham