繁体   English   中英

使用CIFilter将滤镜应用于UIImage和旋转的图像

[英]Filter applied to UIImage and rotated image using CIFilter

当我将UIImage应用于过滤器时,图像的结果是图像被旋转了! 我已经试过了:

var filterNames: [String] = ["CIPhotoEffectTonal","CIPhotoEffectNoir","CIMaximumComponent","CIMinimumComponent","CIDotScreen", "CISepiaTone", "CIFalseColor", "CIColorInvert", "CIColorPosterize", "CIPhotoEffectChrome", "CIPhotoEffectInstant"]

    let CIfilterName = filterNames[indexPath.row]
    print(CIfilterName)

    let ciContext = CIContext(options: nil)
    let startImage = CIImage(image: originalImage)

    let filter = CIFilter(name: CIfilterName)
    filter!.setDefaults()

    filter!.setValue(startImage, forKey: kCIInputImageKey)
    let filteredImageData = filter!.valueForKey(kCIOutputImageKey) as! CIImage
    let filteredImageRef = ciContext.createCGImage(filteredImageData, fromRect: filteredImageData.extent)

    let originalOrientation: UIImageOrientation = (imageView.image?.imageOrientation)!
    let originalScale: CGFloat = (imageView.image?.scale)!
    let newPtImage: UIImage = UIImage.imageWithCGImage(filteredImageRef, scale: originalScale, orientation: originalOrientation)
    imageView.image = newPtImage

    imageView.image = UIImage(CGImage: filteredImageRef);

比例尺的最后一部分是我尝试过的部分,但是我正在显示代码的那部分,以便您可以看到我做错了什么或不知道做什么。

我找到了这个答案,但这是在Objective-c中: obj-c中的Stackoverflow答案

您可以尝试使用UIImageOrientation来解决此问题,但我绝对建议您使用扩展名的switchGithub Sample)语句,因为稍后将照片上传到服务器时,它也可能会再次更改其方向。

例:

UIImage(CGImage: imageRef, scale: 1.0, orientation: UIImageOrientation.Right)

当图像高度大于图像宽度时会出现此问题,因此如果图像的高度大于宽度,则应在应用CIFilter之前通过相互交换图像高度和宽度来调整图像的大小。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM