在 swift 中将滤镜应用于图像交换高度和宽度

Applying Filters to image swap height and width in swift

目前我正在开发一个应用程序,我可以在其中拍摄照片并将滤镜应用于照片。过滤器应用完美,但在应用过滤器后,新图像大小高度宽度与捕获的图像交换。像这样

我想不通我哪里出错了

  let ciContext = CIContext(options: nil)
    let coreimg = CIImage(image: AppDelegate.captured_iamge!)
    let filter = CIFilter(name: CIFilterNames[indexPath.row])
    filter!.setDefaults()
    filter!.setValue(coreimg, forKey: kCIInputImageKey)
    let filtered_img_data = filter!.value(forKey: kCIOutputImageKey) as! CIImage
    let filtered_img_ref = ciContext.createCGImage(filtered_img_data, from: filtered_img_data.extent)
    let img = UIImage(cgImage: filtered_img_ref!)
    img_view.image = img

如果有人能帮忙就太好了

这很可能会发生,因为您的输入图像的方向(纵向)与相机的自然方向(横向)不同。

如果您询问 UIImage 的尺寸,它已经考虑了方向。然而,在引擎盖下,图像数据是在它来自相机时存储的,这也是 Core Image 正在运行的。所以在你的过滤器链中,图像丢失了它的方向信息。

我认为您可以通过在创建时将该信息传递给输出图像来解决此问题:

let inputImage = AppDelegate.captured_iamge!
//...
let img = UIImage(cgImage: filtered_img_ref!, scale: inputImage.scale, orientation: inputImage.orientation)