2016-07-02 7 views
2

ich zum Beispiel Code suchen, wie NSImages in eine neue NSImage für Mac OS (nicht Iphone IOS) zu fusionieren. ThxMac OS Xcode Swift 2.2 Kombinieren Sie 2 oder mehr NS Bilder in ein ein neues NSImage

+0

Vielen Dank für Ihre Antwort. Jedoch die referenzierte Code erstellt ein CI Bild nicht die NSImage gewünschte – FJC

+0

Ich habe versucht, diesen Link http://stackoverflow.com/questions/17386650/converting-ciimage-into-nsimage, die nicht funktioniert hat, Sie haben einen guten Link? – FJC

+0

Noch besser, ich schreibe eine Antwort, ich bin fast fertig. :) – Moritz

Antwort

1

Sie können die leistungsstarken Filter von Core Image verwenden zwei NSImages zu verschmelzen.

In diesem Beispiel Core Image des "CIAdditionCompositing" Filter verwenden.

Zuerst machen CIImages aus den beiden NSImages Sie, zum Beispiel mit ihrer URL mischen wollen:

let img1 = CIImage(contentsOfURL: yourFirstImageURL) 
let img2 = CIImage(contentsOfURL: yourSecondImageURL) 

Dann initialisieren CIFilter:

let filter = CIFilter(name: "CIAdditionCompositing")! 
filter.setDefaults() 

Zusammenführen der beiden Bilder erhalten Sie auf entscheiden, welche man vor dem anderen ist:

filter.setValue(img1, forKey: "inputImage") 
filter.setValue(img2, forKey: "inputBackgroundImage") 

let resultImage = filter.outputImage 

Erhalten Sie ein NSImage zurück:

Wenn Sie mehrere Bilder zusammenführen müssen, nehmen Sie einfach das Ergebnis der vorherigen Zusammenführungsoperation und fügen Sie es erneut einem anderen Bild hinzu, das denselben Code verwendet.

Hinweis: in diesem Beispiel bin ich „Kraft auspackt“ die optionals, für Klarheit. In Ihrem echten Code sollten Sie die Möglichkeit eines Fehlers behandeln und die Optionen stattdessen sicher auspacken.

+0

Funktioniert gut, Thx – FJC

+0

Gern geschehen. – Moritz

+0

Hallo @EricAya, deine Antwort ist wirklich gut. Wenn ich außerdem eine Position von inputImage auf inputBackgroundImage festlegen möchte (z. B. inputImage wird in der unteren rechten Ecke von inputBackgroundImage platziert), wie könnte ich es in CIFilter spezifizieren –