gpt4 book ai didi

swift - 将 UIImage 转换为灰度以保持图像质量

转载 作者:IT王子 更新时间:2023-10-29 05:16:16 28 4
gpt4 key购买 nike

我有这个扩展(在 obj-c 中找到,我将它转换为 Swift3)以获得相同的 UIImage 但灰度化:

public func getGrayScale() -> UIImage
{
let imgRect = CGRect(x: 0, y: 0, width: width, height: height)

let colorSpace = CGColorSpaceCreateDeviceGray()

let context = CGContext(data: nil, width: Int(width), height: Int(height), bitsPerComponent: 8, bytesPerRow: 0, space: colorSpace, bitmapInfo: CGBitmapInfo(rawValue: CGImageAlphaInfo.none.rawValue).rawValue)
context?.draw(self.cgImage!, in: imgRect)

let imageRef = context!.makeImage()
let newImg = UIImage(cgImage: imageRef!)

return newImg
}

我可以看到灰色图像,但它的质量很差...我唯一能看到与质量相关的是上下文构造函数中的 bitsPerComponent: 8。但是看看 Apple 的文档,这是我得到的:

enter image description here

显示iOS只支持8bpc...所以为什么我不能提高质量?

最佳答案

试试下面的代码:

注意:代码已更新且错误已修复...

  • 在 Swift 3 中测试的代码。
  • originalImage 是您尝试转换的图像。

答案 1:

     var context = CIContext(options: nil)

更新:CIContext 是处理rendering 的核心图像组件,核心图像的所有处理都在中完成>CI上下文。这有点类似于 Core GraphicsOpenGL context。有关更多信息,请参阅 Apple Doc.

     func Noir() {

let currentFilter = CIFilter(name: "CIPhotoEffectNoir")
currentFilter!.setValue(CIImage(image: originalImage.image!), forKey: kCIInputImageKey)
let output = currentFilter!.outputImage
let cgimg = context.createCGImage(output!,from: output!.extent)
let processedImage = UIImage(cgImage: cgimg!)
originalImage.image = processedImage
}

你还需要考虑以下可以产生类似效果的过滤器

  • CIPhotoEffectMono
  • CIPhotoEffectTonal

答案 1 的输出:

enter image description here

答案 2 的输出:

enter image description here

改进的答案:

答案2:在应用coreImage滤镜前自动调整输入图像

var context = CIContext(options: nil)

func Noir() {


//Auto Adjustment to Input Image
var inputImage = CIImage(image: originalImage.image!)
let options:[String : AnyObject] = [CIDetectorImageOrientation:1 as AnyObject]
let filters = inputImage!.autoAdjustmentFilters(options: options)

for filter: CIFilter in filters {
filter.setValue(inputImage, forKey: kCIInputImageKey)
inputImage = filter.outputImage
}
let cgImage = context.createCGImage(inputImage!, from: inputImage!.extent)
self.originalImage.image = UIImage(cgImage: cgImage!)

//Apply noir Filter
let currentFilter = CIFilter(name: "CIPhotoEffectTonal")
currentFilter!.setValue(CIImage(image: UIImage(cgImage: cgImage!)), forKey: kCIInputImageKey)

let output = currentFilter!.outputImage
let cgimg = context.createCGImage(output!, from: output!.extent)
let processedImage = UIImage(cgImage: cgimg!)
originalImage.image = processedImage

}

注意:如果您想看到更好的结果。您应该在真实设备而不是模拟器中测试您的代码。 .

关于swift - 将 UIImage 转换为灰度以保持图像质量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40178846/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com