ios - UIImageView contentMode 在应用模糊效果后不起作用

标签 ios swift uiimageview uiimage ciimage

我正在尝试将 UIImageView 的图像属性设置为我正在使用 CoreImage 进行模糊处理的图像。该代码与未过滤的图像完美配合,但是当我将背景图像设置为过滤后的图像时,contentMode 似乎停止为 UIImageView 工作——而不是纵横比填充,图像变得垂直拉伸(stretch)。除了在代码中设置了contentMode,我还在storyboard上设置了,但是结果是一样的。

我正在使用 Swift 2/Xcode 7。

func updateBackgroundImage(image: UIImage) {
    backgroundImage.contentMode = .ScaleAspectFill
    backgroundImage.layer.masksToBounds = true
    backgroundImage.image = blurImage(image)
}

func blurImage(image: UIImage) -> UIImage {
    let imageToBlur = CIImage(image: image)!

    let blurfilter = CIFilter(name: "CIGaussianBlur")!
    blurfilter.setValue(10, forKey: kCIInputRadiusKey)
    blurfilter.setValue(imageToBlur, forKey: "inputImage")

    let resultImage = blurfilter.valueForKey("outputImage") as! CIImage
    let croppedImage: CIImage = resultImage.imageByCroppingToRect(CGRectMake(0, 0, imageToBlur.extent.size.width, imageToBlur.extent.size.height))
    let blurredImage = UIImage(CIImage: croppedImage)

    return blurredImage
}

为什么使用 CIImage 过滤会导致我的图像忽略 contentMode,我该如何解决这个问题?

最佳答案

解决方案是更换您的线路:

let blurredImage = UIImage(CIImage: croppedImage)

用这两行:

let context = CIContext(options: nil)
let blurredImage = UIImage (CGImage: context.createCGImage(croppedImage, fromRect: croppedImage.extent))

所以你的完整 blurImage 函数看起来像这样:

func blurImage(image: UIImage) -> UIImage {
    let imageToBlur = CIImage(image: image)!

    let blurfilter = CIFilter(name: "CIGaussianBlur")!
    blurfilter.setValue(10, forKey: kCIInputRadiusKey)
    blurfilter.setValue(imageToBlur, forKey: "inputImage")

    let resultImage = blurfilter.valueForKey("outputImage") as! CIImage
    let croppedImage: CIImage = resultImage.imageByCroppingToRect(CGRectMake(0, 0, imageToBlur.extent.size.width, imageToBlur.extent.size.height))
    let context = CIContext(options: nil)
    let blurredImage = UIImage (CGImage: context.createCGImage(croppedImage, fromRect: croppedImage.extent))

    return blurredImage
}

关于ios - UIImageView contentMode 在应用模糊效果后不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32596264/

相关文章:

objective-c - 如何遍历 objective-c 中的 NSString?

ios - 如何在 uilabel 中添加第二个 NSTextAttachment 图像?

c++ - Xamarin iOS Native 链接在模拟器上工作,在设备上复制符号

ios - AVPlayer 不从子域的 url 加载视频

快速滚动到只有空白部分的表格底部

ios - 使用自动布局时 UIImageView 没有动画

ios - uitableViewCell.background View 行为怪异?

ios7 - 访问数组使 UITableView 在滚动时滞后

ios - 将 UIImageView 设置为模糊的初始状态

objective-c - 如何在 ios 5.0 中执行 Bump Distortion?