Konvertieren Sie UII zu Graustufen, wobei die Bildqualität erhalten bleibt

8

Ich habe diese Erweiterung (in obj-c gefunden und ich habe sie in Swift3 konvertiert), um dieselbe UIImage , aber grau skaliert zu erhalten:

%Vor%

Ich kann das graue Bild sehen, aber seine Qualität ist ziemlich schlecht ... Das einzige, was ich sehen kann, das mit der Qualität zusammenhängt, ist bitsPerComponent: 8 im Context Contructor. Aber wenn ich mir Apples Dokument anschaue, hier ist, was ich bekomme:

Es zeigt, dass iOS nur 8bpc unterstützt ... Warum kann ich die Qualität nicht verbessern?

    
Dliix 21.10.2016, 14:09
quelle

6 Antworten

22

Probieren Sie den folgenden Code aus:

Hinweis: Code aktualisiert und Fehler wurden behoben ...

  • Code in Swift 3 getestet.
  • originalImage ist das Bild, das Sie konvertieren möchten.

Antwort 1:

%Vor%

Update: CIContext ist die Core Image-Komponente, die rendering verarbeitet. Die gesamte Verarbeitung eines Core-Images erfolgt in CIContext . Dies ist in etwa vergleichbar mit Core Graphics oder OpenGL context . Weitere Informationen finden Sie in Apple Doc.

%Vor%

Sie müssen auch folgenden Filter berücksichtigen, der einen ähnlichen Effekt erzeugen kann

  • CIPhotoEffectMono
  • CIPhotoEffectTonal

Ausgabe von Antwort 1:

Ausgabe von Antwort 2:

Verbesserte Antwort:

Antwort 2: Automatisches Anpassen des Eingabebilds vor dem Anwenden des coreImage-Filters

%Vor%

Hinweis: Wenn Sie das bessere Ergebnis sehen möchten. Sie sollten Ihren Code auf real device nicht in simulator ...

testen     
Joe 21.10.2016, 17:09
quelle
6

Joes Antwort als UIImage extension für Swift 4 funktioniert für verschiedene Maßstäbe korrekt:

%Vor%     
Peter Prokop 17.12.2017 14:07
quelle
3

Ich würde CoreImage verwenden, wodurch die Qualität erhalten bleibt.

%Vor%

Je nachdem, wie Sie diesen Code verwenden, möchten Sie möglicherweise den CIContext aus Leistungsgründen außerhalb davon erstellen.

    
dfd 21.10.2016 16:36
quelle
3

Eine Swift 4.0 Erweiterung, die ein optionales UIImage zurückgibt, um mögliche Abstürze auf der Straße zu vermeiden.

%Vor%

Um dies zu verwenden:

%Vor%     
CodeBender 30.01.2018 19:33
quelle
1

Hier ist eine Kategorie in Ziel c. Beachten Sie, dass diese Version kritisch die Skalierung berücksichtigt.

%Vor%     
arsenius 28.12.2016 02:36
quelle
0

Laut Joe Antwort haben wir das Original einfach in B & amp; W umgewandelt. Aber zurück zum Original Bild beziehen sich auf diesen Code:

%Vor%     
SPooja 04.08.2017 07:24
quelle

Tags und Links