【问题标题】:Imageview image either not setting or filtering properlyImageview 图像未正确设置或过滤
【发布时间】:2018-02-25 20:21:17
【问题描述】:

我有一个 imageview,我通过使用相机或从画廊设置它的图像,然后使用 ciImage 向它添加过滤器。 问题是当我对该图像应用过滤器然后将该图像设置回imageview时,它会在一些间隙后开始。我对 gab 没有问题,但它应该在双方同样保持原始图像方面。 ,黑色部分仅是 imageview 的一部分(在调试视图层次结构中检查)

captuingImageController(捕获图像并将图像发送到)-> filterViewController(过滤并设置图像)

奇怪的是,并非所有图像都发生这种情况,而仅适用于我使用此应用程序捕获的图像。但如果我不过滤图像并直接完美地设置它。所以不明白问题出在哪里,是过滤还是捕获图像。 PS:如果我用照片应用打开同一张图片,它看起来很好。

这是为图片添加滤镜的代码。

 override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationController?.navigationBar.isHidden = true
    self.selectedImageView.image  = image

    //------ if I comment out the below filtering part image lookes perfect but if i use image not center with scaleAspectFill.
    self.selectedImageView.contentMode = .scaleAspectFit
    guard let image = image, let cgimg = image.cgImage else {
        print("imageView doesn't have an image!")
        return
    }
    let coreImage = CIImage(cgImage: cgimg)
    let filter = CIFilter(name: "CISepiaTone")
    filter?.setValue(coreImage, forKey: kCIInputImageKey)
    filter?.setValue(1, forKey: kCIInputIntensityKey)

    if let output = filter?.value(forKey: kCIOutputImageKey) as? CIImage {
        let filteredImage: UIImage = UIImage(ciImage: output)
        selectedImageView?.image = filteredImage
        UIImageWriteToSavedPhotosAlbum(filteredImage, self, #selector(image(_:didFinishSavingWithError:contextInfo:)), nil)            
        self.selectedImageView.contentMode = UIViewContentMode.scaleAspectFill
    } else {
        print("image filtering failed")
    }
    // ------
} 

捕获图像后的代码

public func photoOutput(_ captureOutput: AVCapturePhotoOutput, didFinishProcessingPhoto photoSampleBuffer: CMSampleBuffer?, previewPhoto previewPhotoSampleBuffer: CMSampleBuffer?,
                        resolvedSettings: AVCaptureResolvedPhotoSettings, bracketSettings: AVCaptureBracketedStillImageSettings?, error: Swift.Error?) {
    if let error = error { self.photoCaptureCompletionBlock?(nil, error) }

    else if let buffer = photoSampleBuffer, let data = AVCapturePhotoOutput.jpegPhotoDataRepresentation(forJPEGSampleBuffer: buffer, previewPhotoSampleBuffer: nil),
        var image = UIImage(data: data) {
        if currentCameraPosition == .front {
            image = UIImage(cgImage: image.cgImage!, scale: image.scale, orientation: .leftMirrored)
        }

        self.photoCaptureCompletionBlock?(image, nil)
    }

    else {
        self.photoCaptureCompletionBlock?(nil, CameraControllerError.unknown)
    }
}

而且我还必须添加基于用户向左或向右滑动的不同过滤器,如 instagarm,还添加裁剪函数、正方形、矩形和比率以及许多很酷的东西,但首先这个演示的东西不能完美运行 :-( 如果你有任何正在做所有这些事情的教程或示例代码共享链接提前谢谢

【问题讨论】:

    标签: ios swift ciimage imagefilter


    【解决方案1】:

    在应用过滤器存储比例和方向时仅缺少一条线设置原始图像的比例和方向,然后在转换回 uiImage 时将其设置回来

    let filteredImage  = UIImage(cgImage:filteredImageRef!, scale:imgScale!, orientation:imgOrientation!)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-16
      • 1970-01-01
      相关资源
      最近更新 更多