Создание UIImage из CIImage всегда кажется неудачным - PullRequest
0 голосов
/ 17 октября 2018

Получение 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)

...