iOS:如何创建剥离图像?

时间:2016-01-11 09:30:06

标签: ios swift image

我想为我的UIView设置一个剥离的背景。 如何在swift中创建一个简单的剥离图像?

像这样: stripped image

谢谢!

更新答案:

感谢Simon Gladman,我创建了一个制作剥离颜色的功能。但是我没有设法轮换,可能是因为fromRect属性。

// create a striped color
func strippedColor(color1: UIColor, _ color2: UIColor, width: CGFloat = 1) -> UIColor {
    let context = CIContext()
    let blurFilter = CIFilter(name: "CIStripesGenerator")!
    blurFilter.setValue(CIColor(color: color1), forKey: "inputColor0")
    blurFilter.setValue(CIColor(color: color2), forKey: "inputColor1")
    blurFilter.setValue(width, forKey: "inputWidth")
    let ref = context.createCGImage(blurFilter.outputImage!, fromRect: CGRect(x: 0, y: 0, width: 2*width, height: 1))
    let ref2 = ref


    //let rotateFilter = CIFilter(name: "CIStraightenFilter")!
    //rotateFilter.setValue(CIImage(CGImage: ref), forKey: "inputImage")
    //rotateFilter.setValue(NSNumber(double: 2), forKey: "inputAngle")
    //let ref2 = context.createCGImage(rotateFilter.outputImage!, fromRect: rotateFilter.outputImage!.extent)

    let uiimage = UIImage(CGImage: ref2)
    let uicolor = UIColor(patternImage: uiimage)
    return uicolor
}

3 个答案:

答案 0 :(得分:4)

由于使用了CIStraightenFilter,旋转在(更新的)原始帖子中不起作用。这个过滤器可能不适合用作一般的旋转过滤器,因为它可能只是拉直图像:)

我认为CIAffineTransform更适合这种情况。

以下示例生成条带并将其旋转45度,对我来说效果很好。

斯威夫特3:

fileprivate func generateImage(_ width: CGFloat, _ height: CGFloat) -> UIImage {
    let context = CIContext()
    let stripes = CIFilter(name: "CIStripesGenerator", withInputParameters: [
        "inputColor0" : CIColor(red: 0.000, green: 0.000, blue: 0.000),
        "inputColor1" : CIColor(red: 0.259, green: 0.259, blue: 0.259),
        "inputWidth" : NSNumber(value: 2.0),
        "inputSharpness" : NSNumber(value: 0.0)
    ])!.outputImage!

    let rotated = CIFilter(name: "CIAffineTransform", withInputParameters: [
        "inputImage" : stripes,
        "inputTransform" : NSValue(cgAffineTransform: CGAffineTransform(rotationAngle: 45.0))
    ])!.outputImage!
    return UIImage(cgImage: context.createCGImage(rotated, from: CGRect(x: 0, y: 0, width: width, height: height))!)
}

答案 1 :(得分:1)

如果是我,我会使用CoreImage的CIStripesGenerator过滤器来创建条纹图案,然后将其链接到CIStraightenFilter以将其旋转1/4 pi弧度。

使用过滤器创建模式使您可以在运行时控制条带的宽度和颜色。

您可以了解Apple的CoreImage框架here

干杯!

西蒙

答案 2 :(得分:1)

你绝对可以使用Simon给出的CoreImage答案。它会给出很多动态控制。

如果您只是反复创建相同的模式,那么您可以使用此...

let stripedColor = UIColor(patternImage: stripedPatternImage)

模式图像只包含一个"单位"条纹一遍又一遍地重复创建你想要的图案。