ios - 将 CIFilter 应用于 UIImage 会导致调整大小和重新定位图像

标签 ios swift cifilter ciimage

将 CIFilter 应用于相机拍摄的照片后,拍摄的图像会缩小并重新定位。

我在想,如果我能够获得原始图像的大小和方向,它会相应地缩放并将 imageview 固定到屏幕的角落。然而,这种方法没有任何改变,也不知道我可以正确地让图像缩放到屏幕的全尺寸的方法。

func applyBloom() -> UIImage {
  let ciImage = CIImage(image: image) // image is from UIImageView

  let filteredImage = ciImage?.applyingFilter("CIBloom",
                                              withInputParameters: [ kCIInputRadiusKey: 8,
                                                                     kCIInputIntensityKey: 1.00 ])
  let originalScale = image.scale
  let originalOrientation = image.imageOrientation


  if let image = filteredImage {
    let image = UIImage(ciImage: image, scale: originalScale, orientation: originalOrientation)
    return image
  }

  return self.image
}

图片说明: 已捕获的照片和带有空白间距的图像的屏幕截图是图像缩小的结果。

enter image description here

最佳答案

尝试这样的事情。替换:

func applyBloom() -> UIImage {
    let ciInputImage = CIImage(image: image) // image is from UIImageView
    let ciOutputImage = ciInputImage?.applyingFilter("CIBloom",
                                          withInputParameters: [kCIInputRadiusKey: 8, kCIInputIntensityKey: 1.00 ])
    let context = CIContext()
    let cgOutputImage = context.createCGImage(ciOutputImage, from: ciInputImage.extent)
    return UIImage(cgImage: cgOutputImage!)
}
  • 我保留了各种变量来帮助解释正在发生的事情。
  • 显然,根据您的代码,可能需要对可选值和展开进行一些调整。

这是怎么回事 - 获取过滤/输出 CIImage,并使用 CIContext,编写一个 CGImage,其大小与输入 CIImage 相同。

  • 请注意 CIContext 是昂贵的。如果您已经创建了一个,您可能应该使用它。
  • 几乎,UIImage 大小 与 CIImage 范围 相同。 (我说几乎是因为一些生成的 CIImages 可以有 无限 范围。)
  • 根据您的特定需求(和您的 UIImageView),您可能希望改用输出 CIImage 范围。但通常情况下,它们是相同的。

最后,一个建议。如果您尝试使用 CIFilter 来显示图像的“近实时”更改(例如照片编辑器),请考虑使用 CIImages 和 GLKView 而不是 UIImages 的主要性能改进和一个 UIImageView。前者使用设备 GPU 而不是 CPU。

关于ios - 将 CIFilter 应用于 UIImage 会导致调整大小和重新定位图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43709334/

相关文章:

ios - 如何制作具有动态类型支持的应用程序?

ios - 使 UICollectionViewController 分页部分

swift - 在 SwiftUI 中更改文本编辑器的背景颜色

ios - 如何在 iOS 中的 Google map 上绘制弧线?

swift - 如何不使深灰色变得透明,从图像中去除背景

swift - 如何使用 Swift 在 NSOpenGLView 中绘制图像?

ios - 如何在 Swift 中制作透明背景 WKWebView

ios - 如何同步iOS设备上的应用数据和核心数据?

ios - 我正在使用 CIFilter 获取模糊图像,但为什么输出图像总是大于输入图像?

ios - 如何使用一个 UIViewController 和两个 UIPickerView?