ios - CIDepthBlurEffect,出现奇怪的垂直线
问题描述
我设法自己制作了焦点效果,但我发现了另一个问题。每次我通过 CIDepthBlurEffect 渲染具有深度的照片时,都会出现如下奇怪的垂直线:
它们总是出现在照片顶部的同一个地方。
你知道如何解决这个问题吗?请给我你的想法。
编辑:我留下了我有问题的代码。抱歉,代码混乱。
深度照片
//getting depth data
func getdepth(with data: Data, guide: CIImage) -> CIImage?{
let processedimage = CIImage(data: data, options: [
CIImageOption.nearestSampling: false,
CIImageOption.auxiliaryDisparity: true,
//CIImageOption.auxiliaryDepth: true,
CIImageOption.applyOrientationProperty: true
])
if let depth = processedimage?.upsample(guide: guide){
return depth
}
return processedimage
}
//upsample
extension CIImage{
func upsample(guide: CIImage) -> CIImage?{
//let trans = CGAffineTransform(scaleX: self.extent.width / guide.extent.width, y: self.extent.height / guide.extent.height)
//let guider = guide.transformed(by: trans)
guard let filter = CIFilter(name: "CIEdgePreserveUpsampleFilter") else { return nil }
filter.setValue(self, forKey: "inputSmallImage")
filter.setValue(guide, forKey: kCIInputImageKey)
return filter.outputImage
}
}
//main image
guard let image = CIImage(data: data, options:
[CIImageOption.applyOrientationProperty: true]
) else { return }
//input variable: main: CIImage, depth: CIImage, matte: CIImage?
let transform = CGAffineTransform(
scaleX: main.extent.width / combined.extent.width,
y: main.extent.height / combined.extent.height
)
let depthscaled = depth.transformed(by: transform)
var applyingdepth: CIFilter!
if let mat = matte{
if #available(iOS 12.0, *) {
applyingdepth = CIFilter(name: "CIDepthBlurEffect", parameters: [
kCIInputImageKey: main,
kCIInputDisparityImageKey: depthscaled,
kCIInputMatteImageKey: mat
])!
}
}else {
applyingdepth = CIFilter(name: "CIDepthBlurEffect", parameters: [
kCIInputImageKey: main,
kCIInputDisparityImageKey: depthscaled
])!
}
applyingdepth.setValue(1.4, forKey: "inputAperture")
return applying depth.output // this is "portraitimage"
//outside of this block
guard let portrait = context.createCGImage(portraitimage, from: portraitimage.extent) else { return }
UIImageWriteToSavedPhotosAlbum(UIImage(cgImage: portrait), nil, nil, nil)
解决方案
推荐阅读
- matlab - 如何在 MATLAB 中计算水平(或垂直)投影?
- python - 向现有模块方法手动添加回调的正确方法是什么?
- javascript - 多个听众与单亲是否存在计费或性能影响
- html - 使用 css 在一行中显示标签和输入
- arrays - 如果元素出现超过 n 次,则删除该元素的出现 - 我自己的代码
- python - keras模型中无效的numpy形状
- django - 如何在 Django 中向 Textareas 添加占位符
- ios - 如何移动形状层的位置(swift4)
- python - SQLAlchemy——用尽可能少的查询分组和计数唯一
- javascript - 将 HTML/JS 变量传递给 Python