iOS 人物去背

Apple 在 CoreImage 里提供了强大的 CIFilter 方便我们影像处理
前提是只能处理 CIImage,所以需要先将 Image 转成 CIImage

convenience init?(named: String) {    guard let image = UIImage(named: named)?.cgImage else {        return nil    }    self.init(cgImage: image)}

回到 CIFilter,
原本使用的方法: CIFilter(name: "CIBoxBlur"),太不Swifty了。
还好官方提供了另一种方法:只要 import CoreImage.CIFilterBuiltins 就能使用 CIFilter.boxBlur()

进入主题
人物去背,只要使用 CIFilter.personSegmentation() 就可以达到效果
以Jay为例
http://img2.58codes.com/2024/20123457jDyQviZI7z.jpg

let input = CIImage(named: "Jay")!let person = CIFilter.personSegmentation()person.inputImage = inputperson.qualityLevel = 1

就会得到遮照图
http://img2.58codes.com/2024/20123457Y2mktWt6eb.png

这时候只要让原图混上红色遮照图就完成了

let mask = CIFilter.blendWithRedMask()mask.inputImage = inputmask.maskImage = person.outputImage

http://img2.58codes.com/2024/20123457bHtGT2Wom4.png

http://img2.58codes.com/2024/emoticon04.gif等等,发生什么事?
仔细看就会发现,person 和 input 的长宽比不一样
所以需要做调整

extension CIImage {    func scale(size: CGSize) -> CIImage {        let x = size.width / self.extent.width        let y = size.height / self.extent.height        let transform = CGAffineTransform(scaleX: x, y: y)        return  transformed(by: transform)    }}
mask.maskImage = person.outputImage!.scale(size: size)

http://img2.58codes.com/2024/20123457CZCNrzTeVH.png


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章