Получение UIImage
из CIImgae
через UIImage(ciImage:)
представляется очень старой проблемой, которая все еще кажется проблемой.Вот старый поток в stackoverflow, который представляет ту же проблему: старый поток
Я бы предположил, что эту проблему следует исправить в 6 основных выпусках iOS (в настоящее время я запускаю код для iOS12.0), но, похоже, это не так.Вот пример кода игровой площадки, чтобы вы могли попробовать и воспроизвести проблему:
import Foundation
import UIKit
import PlaygroundSupport
// extend UIImage to support cunstruction of solid color images
extension UIImage {
public convenience init?(color: UIColor, size: CGSize = CGSize(width: 1, height: 1), contentScaleFactor: CGFloat = UIScreen.main.scale) {
let rect = CGRect(origin: CGPoint.zero, size: size)
UIGraphicsBeginImageContextWithOptions(rect.size, false, contentScaleFactor)
color.setFill()
UIRectFill(rect)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
guard let cgImage = image?.cgImage else { return nil }
self.init(cgImage: cgImage, scale: contentScaleFactor, orientation: .up)
}
}
let uIImage = UIImage(color: UIColor.red, size: CGSize(width: 100.0, height: 100.0), contentScaleFactor: 1.0)!
let cIImage = CIImage(image: uIImage)!
let finalUIImage = UIImage(ciImage: cIImage)
let imageView = UIImageView(image: finalUIImage)
PlaygroundPage.current.liveView = imageView
Где строка let finalUIImage = UIImage(ciImage: cIImage)
приводит к ошибке
Не удалось преобразовать UIImage в png
Как указано в ответе на ранее упомянутую старую статью о stackoverflow, замена let finalUIImage = UIImage(ciImage: cIImage)
на
let context = CIContext()
let finalCGImage = context.createCGImage(cIImage, from: cIImage.extent)!
let finalUIImage = UIImage(cgImage: finalCGImage)
работает.
Iя пишу этот вопрос, потому что я хочу знать:
- Можете ли вы воспроизвести это поведение?
- Это все еще ошибка?(что сбивает с толку, так как answer утверждает, что это должно быть исправлено в iOS 6, но я сталкиваюсь с этой проблемой в iOS 12)
(протестировано на XCode 10.1 beta 3 и XCode 10.0)