2017-07-26 3 views
2
Ändern

: Ich bin zu schnell und versuchen, dies im Wesentlichen zu erreichen, Dieses Bild zu enter image description hereden Farbton des Bildes in schnellen

Dieses Bild ->

enter image description here

ich dies mit Code from here, um den Farbton auf Bild zu ändern, aber erhalten Sie nicht die gewünschte Ausgabe

Wenn das eine noob Frage ist, entschuldigen Sie bitte. Ich konnte dies leicht in Javascript, aber nicht in swift tun.

+1

es ist Ihre Bildansicht oder eine mehrere Bilder –

+0

Dieses Bild wird als Material angewendet –

Antwort

2

hi können Sie es folgendermaßen verwenden. Zuerst benötigt die UIImage Extension, die du benutzt hast, einige Updates. Sie können den Code für Swift kopieren 3

extension UIImage{ 
func tint(color: UIColor, blendMode: CGBlendMode) -> UIImage 
{ 

    let drawRect = CGRect(x: 0,y: 0,width: size.width,height: size.height) 
    UIGraphicsBeginImageContextWithOptions(size, false, scale) 
    color.setFill() 
    UIRectFill(drawRect) 
    draw(in: drawRect, blendMode: blendMode, alpha: 1.0) 
    let tintedImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
    return tintedImage! 
} 
} 

Dann in Ihrem viewDidLoad wo Sie das Bild werden zum Beispiel verwendet, um ich das Bild von IBOutlet imageWood

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    self.imageWood.image = self.imageWood.image?.tint(color: UIColor.green, blendMode: .saturation) 
} 

Sie müssen die verwenden entsprechende Farbe und die Bilder

Die andere Extension i gefunden

extension UIImage { 

// colorize image with given tint color 
// this is similar to Photoshop's "Color" layer blend mode 
// this is perfect for non-greyscale source images, and images that have both highlights and shadows that should be preserved 
// white will stay white and black will stay black as the lightness of the image is preserved 
func tint(_ tintColor: UIColor) -> UIImage { 

    return modifiedImage { context, rect in 
     // draw black background - workaround to preserve color of partially transparent pixels 
     context.setBlendMode(.normal) 
     UIColor.black.setFill() 
     context.fill(rect) 

     // draw original image 
     context.setBlendMode(.normal) 
     context.draw(self.cgImage!, in: rect) 

     // tint image (loosing alpha) - the luminosity of the original image is preserved 
     context.setBlendMode(.color) 
     tintColor.setFill() 
     context.fill(rect) 

     // mask by alpha values of original image 
     context.setBlendMode(.destinationIn) 
     context.draw(self.cgImage!, in: rect) 
    } 
} 

// fills the alpha channel of the source image with the given color 
// any color information except to the alpha channel will be ignored 
func fillAlpha(_ fillColor: UIColor) -> UIImage { 

    return modifiedImage { context, rect in 
     // draw tint color 
     context.setBlendMode(.normal) 
     fillColor.setFill() 
     context.fill(rect) 

     // mask by alpha values of original image 
     context.setBlendMode(.destinationIn) 
     context.draw(self.cgImage!, in: rect) 
    } 
} 


fileprivate func modifiedImage(_ draw: (CGContext, CGRect) ->()) -> UIImage { 

    // using scale correctly preserves retina images 
    UIGraphicsBeginImageContextWithOptions(size, false, scale) 
    let context: CGContext! = UIGraphicsGetCurrentContext() 
    assert(context != nil) 

    // correctly rotate image 
    context.translateBy(x: 0, y: size.height); 
    context.scaleBy(x: 1.0, y: -1.0); 

    let rect = CGRect(x: 0.0, y: 0.0, width: size.width, height: size.height) 

    draw(context, rect) 

    let image = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
    return image! 
} 

}

Mit ihm wie dieses

self.imageWood.image = self.imageWood.image?.tint(UIColor.purple.withAlphaComponent(1)) 
+0

Ich habe diese Methode verwendet. Ich fülle das gesamte Bild mit Grün aus. Ich habe multiply, sourceIn, sourceOut als Mischmodi ausprobiert, aber alle haben den gleichen Effekt ... wie bekomme ich nur die Linien um die Farbe zu ändern? Die Originalbilder Alpha muss richtig multipliziert werden? –

+0

Verwenden Sie ein .png oder .jpg? auch müssen Sie sicherstellen, dass das Bild in den Boxen transparent ist und nur die Linien sichtbar sind, so dass der Effekt nur auf die Linien angewendet wird –

+0

es ist ein PNG .. der Abstand zwischen den Zeilen ist transparent (Alpha 0) –

0

Versuchen Sie den Code unten, sollte für Sie arbeiten.

if let myImage = UIImage(named: "imageName")?.withRenderingMode(.alwaysTemplate) { 
     myImageView.image = myImage 
     myImageView.tintColor = UIColor.white 
    } 
0

Ihr Bild ist einfach und hat nur eine Farbe. Ich würde vorschlagen, Ihr Bild transparent zu machen, außer wo die Linien sind, und es dann auf einen weißen Hintergrund zu schichten, um Ihre Ergebnisse zu erhalten.

Es sieht so aus, als hätten Sie die Ergebnisse erhalten, die Sie mit den Zeichnungsmodi haben. Es gibt auch eine Reihe von Core-Bildfiltern, mit denen Sie Tönungseffekte auf Bilder anwenden und bestimmte Farben ersetzen können. Dies wäre eine gute Wahl für komplexere Bilder.

+0

Das Bild ist bis auf die Linien transparent. SO zeigt es hier mit dem weißen gefüllt. –

Verwandte Themen