iOS: como criar a imagem despojada?

Quero colocar um fundo despojado no meu UIView. Como criar uma imagem simples despojada em swift ?

Assim : stripped image

Obrigado !

Resposta actualizada:

Graças ao Simon Gladman, crio uma função para fazer uma cor despojada. Mas eu não consegui fazer a rotação, talvez por causa dos atributos 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
}
Author: Nahouto, 2016-01-11

3 answers

A rotação não funciona no post original (actualizado) devido ao uso de CIStraightenFilter. Este filtro provavelmente não está destinado a ser usado como um filtro de rotação geral, uma vez que provavelmente irá apenas endireitar a imagem:)

Acho que a CIAffineTransform é mais adequada para isso.

O seguinte exemplo gera uma risca e roda-a 45 graus e funciona bem para mim.

Swift 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))!)
}
 4
Author: void256, 2017-05-16 17:01:19

Se fosse eu, usaria o filtro de CoreImage {[[0]} para criar o padrão de listras e depois acorrentá-lo a um CIStraightenFilter para rodá-lo por radianos pi 1/4.

Criar o padrão com um filtro dá-lhe o controlo durante o tempo de execução sobre a largura e as cores da faixa.

Aqui .

Saúde! Simão
 1
Author: Simon Gladman, 2016-01-11 09:52:36
Podes usar a resposta do CoreImage que o Simon deu. Vai dar muito Controlo dinâmico.

Se está apenas a criar o mesmo padrão vezes sem conta, então pode usar isto...

let stripedColor = UIColor(patternImage: stripedPatternImage)

A imagem de padrão apenas contém uma única "unidade" da faixa que se repete vezes sem conta criando o padrão que você quer.

 1
Author: Fogmeister, 2016-01-11 09:56:17