2017-09-25 2 views
1

Ich möchte einen Effekt erzeugen, der einem gescannten Bild ein normales Bild verleiht.So passen Sie ein Farbbild wie ein gescanntes Bild an

wie 2 Bilder unten, erstes Bild ist das Originalbild, die zweite Bild ist das eingestellte Bild, Effekte das zweite Bild gefallen sollten, sollte der Text auf der Rückseite der Seite auch verschwinden:

Erstes Bild:

original image

Zweites Bild:

effected image

Ich möchte CoreImage und CIFilter dazu verwenden. neben Kontrast und Helligkeit. Ich denke, sollte Level wie Photoshop anpassen. aber wie kann man das einstellen? oder andere Methode?

Ich habe versucht, es in Photoshop zu justieren, so scheint es, dass die Verwendung von Photoshop-Level-Funktion, diesen Effekt zu erreichen, wird der Wert auf dem Bild unten zeigt:

enter image description here

aber ich weiß nicht, wie zu tun Verwenden Sie CIFilter oder andere Methoden? Ich möchte keine Drittanbieter-Framework oder -Quellen importieren. Weil iOS 11 Notes APP diesen Effekt erreichen kann, denke ich, dass die Methoden und Frameworks von System dies tun können.

+0

Was haben Sie versucht? Was ist passiert, als du es getan hast? – matt

+0

Ich habe einige in Frage erklärt. @ Matt – Tolecen

Antwort

1

Versuchen Sie den folgenden Code.

func getScannedImage(inputImage: UIImage) -> UIImage? { 

    let openGLContext = EAGLContext(api: .openGLES2) 
    let context = CIContext(eaglContext: openGLContext!) 

    let filter = CIFilter(name: "CIColorControls") 
    let coreImage = CIImage(image: filterImage.image!) 

    filter?.setValue(coreImage, forKey: kCIInputImageKey) 
    //Key value are changable according to your need. 
    filter?.setValue(7, forKey: kCIInputContrastKey) 
    filter?.setValue(1, forKey: kCIInputSaturationKey) 
    filter?.setValue(1.2, forKey: kCIInputBrightnessKey) 

    if let outputImage = filter?.value(forKey: kCIOutputImageKey) as? CIImage { 
    let output = context.createCGImage(outputImage, from: outputImage.extent) 
     return UIImage(cgImage: output!) 
    }  
    return nil 
} 

Sie können die obige Funktion wie folgt aufrufen.

filterImage.image = getImage(inputImage: filterImage.image!) 

Ausgang: (Output von realer Gerät)

enter image description here


Für mehr Verständnis über Core Image Filter unten stehende Links und Antworten versuchen.

Get UIImage from function und Convert UIImage to grayscale keeping image quality

Core Image Filter Referenz von Apple Doc: https://developer.apple.com/library/content/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html

Hinweis: Für weitere spezifische Anforderung benötigen Sie eigene Filter zu erstellen. Folgender Link kann helfen https://spin.atomicobject.com/2016/10/20/ios-image-filters-in-swift/


+0

Vielen Dank, ich werde es versuchen. – Tolecen

+0

Lassen Sie mich wissen, dass der Code funktioniert und stellen Sie sicher, dass Sie die Antwort akzeptieren. – Joe

+0

Danke für deinen Code, es funktioniert für dieses Bild, also akzeptiere ich diese Antwort. aber wenn andere Bilder verwendet werden, funktioniert es möglicherweise nicht gut. Ich bemühe mich, eine gemeinsame Lösung zu entwickeln, damit sie für die meisten dieser Art von Bildern funktioniert. Automatisches Erstellen eines gescannten Bildes Wenn Sie also eine geeignete Lösung haben, helfen Sie mir bitte. Vielen Dank. – Tolecen

0

Ich glaube, um manuell Photoshop-ähnliche Pegelanpassung Feature zu implementieren, müssen Sie einige der wichtigsten Kenntnisse auf dem Gebiet der Bildverarbeitung zu verstehen.

Möglicherweise möchten Sie diese Core Image Programming Guide als Ausgangspunkt lesen:

https://developer.apple.com/library/content/documentation/GraphicsImaging/Conceptual/CoreImaging/ci_intro/ci_intro.html

Oder Sie können einfach einen Dritten Rahmen am Ende mit, wenn Sie bereits, dass Sie don angegeben haben Ich möchte keine Bibliotheken von Drittanbietern verwenden. Wenn dies der Fall ist, würde Ich mag GPUImage2, nur für den Fall empfehlen:

https://github.com/BradLarson/GPUImage2

Schließlich fand ich eine ähnliche Frage zu diesem so können Sie einen Blick nehmen:

How can I map Photoshop's level adjustment to a Core Image filter?

Viel Glück.

Verwandte Themen