Ich versuche zu tun, was The GIMP tut, wenn "Farbe zu Alpha" mit einer tatsächlichen Farbe ausgewählt wird.
Ich habe ein Bild mit der Farbe # a0132e, und ich möchte das in Transparenz konvertieren. Nicht nur diese exakte Farbe, sondern auch jede davon abgeleitete Farbe muss so halbtransparent werden. Das macht "color to alpha" in GIMP.
Ich habe eine Million verschiedene Dinge ausprobiert, aber ich kann mich nicht darum kümmern. Ich habe mich selbst für ein paar Stunden frustriert, indem ich den Parameter -fx
getestet habe und es ist eine absolut seltsame Syntax, so dass das überhaupt nicht geholfen hat. Vielleicht werden einige der Optionen für convert
ausreichen, aber ich habe noch nicht das Richtige gefunden, und wirklich, ich habe alles versucht, was Google mir gebracht hat.
Idealerweise möchte ich ein Skript erstellen, das ich so nennen kann:
color-to-alpha.cmd original.png output.png #a0132e
oder ähnlich. Wie kann ich das tun?
Zunächst einmal: Bitte lesen Sie auch meine Antwort " ImageMagick Befehlszeilenoption (und Kategorien von Befehlszeilenparametern) ". Es erklärt ein paar Grundlagen über die Befehlszeilenstruktur von ImageMagick. Insbesondere erklärt es die Hauptunterschiede zwischen:
Diese Unterschiede sind ein entscheidendes Konzept, um komplexe ImageMagick-Befehlszeilen analysieren zu können.
Der vorgeschlagene Befehl ist ziemlich fortgeschritten. Es verwendet Klammern , um zwei verschiedene Abschnitte der vollständigen Befehlszeile zu trennen.
Parenthesized Befehlsabschnitte ermöglichen Bilder "beiseite" des Hauptbefehls zu verarbeiten: Sie können damit eine separate Bildliste bearbeiten und das Ergebnis dieser separaten Verarbeitung an das Ende der vorherigen Liste setzen. (Sie können mehrere verwenden und sogar verschachtelte Bildverarbeitungsoperationen in Klammern in einer einzigen ImageMagick-Befehlszeile verwenden.) In gewisser Weise dient es als Notizblock, wo Sie an einer Teilmenge von Bildern arbeiten und das Ergebnis zurück in die Hauptbildliste bringen.
Jedes Öffnen eines Klammerpaars (" (
") startet eine neue Bildliste.
Alle aufeinander folgenden Parameter innerhalb der Klammern gelten nur für die neue Bildliste.
Der abschließende (" )
") Teil eines entsprechenden Klammerpaares schließt alle "Neben" -Verarbeitung ab und platziert die resultierende Bildliste von "neben" (dies kann bestehen von null, einem oder mehreren Bildern) auf die Hauptbildliste.
Die einzige kleine Änderung, die ich an @ dlemstras ursprünglichen Befehl mache: Ich entkomme dem (
und )
Vorkommen mit einem umgekehrten Schrägstrich und ersetzen diese durch \(
und \)
. Dies ist erforderlich, damit eine Shell wie Bash nicht versucht, diese Zeichen falsch als Anfang und Ende einer Untershell zu interpretieren.
Wichtig: Wenn Sie die Begrenzungszeichen (
und )
für die Verarbeitung auf der Seite verwenden , Sie MÜSSEN Leerzeichen um sie herum lassen - sonst funktionieren sie nicht!
Zuerst mache ich eine Umformatierung für @ dlemstras ursprünglich vorgeschlagenen Befehl. Dies ändert seine Bedeutung im Großen und Ganzen nicht. Es setzt nur jede Einstellung und jede Operation auf eine eigene Zeile.
(Dies gilt für Mac OSX und Linux - für Windows ersetzen Sie einfach alle \
Zeilenfortsetzungszeichen durch ^
.)
Zeile 1: convert
Dies ist der ImageMagick-Befehl , der ausgeführt werden soll.
Zeile 2: original.png
Dies ist das erste Eingabebild , das verarbeitet werden kann.
Zu diesem Zeitpunkt ist dies das einzige Bild in der Hauptbildliste.
Zeile 3: \(
Öffnen Sie eine neue (leere) Bildliste, die "beiseite" von der Hauptbildliste verarbeitet werden soll.
Zeile 4: -clone 0
"- Klon" ist ein Bildstapeloperator .
Es wird aufgefordert, einen Klon dieses Bildes aus der letzten "gedrückten" Bildsequenz zu erstellen.
Das letzte Bild aus der letzten verschobenen Bildsequenz hat den Index 0 .
Mit anderen Worten: Legen Sie eine Kopie von original.png in die aktuelle "neben" -Bildliste.
Zeile 5: -fill "#a0132e"
"- fill" ist eine Bildeinstellung .
Er definiert die Füllfarbe, die beim Füllen eines Grafikgrundelements verwendet werden soll.
"# a0132e" ist eine Art Rot.
Zeile 6: -colorize 100
"- colorize" ist eine Bildoperation .
Es koloriert das Bild um den angegebenen Betrag (hier: 100 ), wobei die Farbe verwendet wird, die in der Einstellung -fill angegeben wurde.
Das Ergebnis ist ein Bild mit der gleichen Größe wie original.png .
Dieses Bild hat die einheitliche Farbe "# a0132e" .
Mit anderen Worten: Das neu erstellte Bild ist ein rötlicher Fleck mit der gleichen Größe wie original.png .
Zeile 7: \)
Dies schließt die Nebenverarbeitung und legt das resultierende Bild am Ende der Hauptbildliste ab.
Jetzt gibt es 2 Bilder in der Hauptbildliste: zuerst, original.png ; zweitens die rötliche, einheitlich gefärbte Farbe derselben Größe, die im "Nebenprozess" erzeugt wurde.
Zeile 8: ( Öffnen Sie eine weitere neue Bildliste für eine weitere "Neben" -Verarbeitung.
Zeile 9: -clone 0,1
"- Klon" ist (noch :) ein Bildstapeloperator .
Hier werden die Bilder mit den Indizes 0 und 1 geklont.
Mit anderen Worten: Legen Sie eine Kopie von original.png und eine Kopie des einheitlich gefärbten "rötlichen" in die aktuelle "Neben" -Liste.
Zeile 10: -compose difference
"- komponieren" ist eine Bildeinstellung .
Es definiert den spezifischen zusammengesetzten Operatoralgorithmus, der später verwendet werden soll, in unserem Fall Unterschied .
Zeile 11: -composite
"- zusammengesetzt" ist ein Bildsequenzoperator .
Es führt Alpha-Komposition für zwei Bilder und eine optionale Maske aus.
Nachdem dieser Operator angewendet wurde, ist nur noch ein Bild in der "Neben" -Bildsequenz übrig.
Dieses Bild ist das Ergebnis des Zusammensetzens des Klons von original.png mit dem einheitlich gefärbten "rötlichen" Bild unter Verwendung des Algorithmus "difference" .
Zeile 12: -separate
"- separate" ist ein weiterer Bildsequenzoperator .
Es trennt einen Bildkanal in ein Graustufenbild.
Nachdem dieser Operator beendet ist, wird eine Anzahl von Graustufenbildern in der "Neben" -Bildsequenz verbleiben.
Diese Zahl hängt von der tatsächlichen Einstellung -channel
ab, die zum Zeitpunkt der Anwendung von -separate
aktiv war.
Zeile 13: +channel
"- channel" ist eine Bildeinstellung .
Normalerweise erscheint es als -channel <type>
, um anzugeben, welche Kanäle verwendet werden sollen.
(Beispiele: -channel Red
für rot, oder -channel GB
für grün + blau, oder -channel Alpha
, oder -channel CMY
oder -channel Cyan,Magenta,Yellow
sowohl für Cyan + Magenta + Gelb).
Das spezielle +
-Präfix mit +channel
bedeutet: Setzen Sie den Wert auf die Standardwerte zurück.
Diese Standardeinstellungen ...
Zeile 14: -evaluate-sequence max
"- evaluate-sequence" ist ein Bildsequenzoperator .
Es ändert die Kanalpixel, indem es einen arithmetischen, relationalen oder logischen Ausdruck über eine Sequenz von Bildern auswertet.
In unserem Fall wird "max" gesetzt.
Die "max" -Methode ruft die maximalen (helleren) Wertewerte für jedes Pixel aus der Sequenz ab.
Als Ergebnis dieses Operators wird ein Bild übrig bleiben, wobei das Pixel jeder Position den hellsten Wert verwendet, nachdem die jeweiligen Pixel jedes der Bilder von der Sequenz verglichen wurden.
Zeile 15: -auto-level
"- auto-level" ist ein Bildoperator .
Es passt automatisch Farbstufen eines Bildes an.
Zeile 16: \)
Dies schließt die Nebenverarbeitung.
Das resultierende Bild der Seitenbearbeitung wird nun in die Hauptbildliste platziert.
Die Hauptbildliste besteht zur Zeit aus 3 Bildern: original.png , das "rötliche" Bild, sowie das Bild, das durch die vorherige "beiseite" Bearbeitung erzeugt wurde.
Zeile 17: -delete 1
"- delete" ist ein Bildsequenzoperator .
Es löscht Bilder nach Index aus einer Bildsequenz.
Index 1
gibt das zweite Bild in der Sequenz an (denken Sie daran: die Indizierung ist 0-basiert).
Nachdem dieser Operator beendet ist, werden nur 2 der vorherigen 3 Bilder in der aktuellen "Neben" -Bildsequenz übrig bleiben (weil das zweite der drei Bilder gelöscht wurde).
Wenn meine Zählung bis jetzt korrekt ist, sollte das gelöschte Bild das einheitlich gefärbte "rötliche" sein, das durch den ersten "Beiseit" -Prozess erzeugt wurde.
Nachdem dieser Vorgang abgeschlossen ist, bleiben 2 Bilder in der Hauptbildliste übrig.
Zeile 18: -alpha off
"- alpha" ist eine Bildeinstellung .
Hier schaltet es den Alpha-Kanal für das Bild (die Bilder) aus.
Hinweis , nur dies deaktiviert den Transparenzkanal des Bilds.
Es löscht oder ändert die vorhandenen Daten nicht.
Es deaktiviert nur die Verwendung dieser Daten für die nachfolgende Verarbeitung.
(Wenn die vorhandenen Daten selbst geändert würden, würde dies als Operator und nicht als Einstellung gelten.)
Zeile 19: -compose over
"- komponieren" ist (noch :) eine Bildeinstellung .
Er legt den Algorithmus fest, der von einem nachfolgenden Operator -composite
image auf "over" verwendet werden soll.
Dieser Algorithmus kombiniert die Quelle über das Ziel.
Dies ist die standardmäßige Mischformmethode für Alpha-Überblendungen.
Zeile 20: -compose copy_opacity
"- komponieren" ist (noch :) eine Bildeinstellung .
Hier wird der zusammengesetzte Algorithmus auf "copy_opacity" gesetzt.
Da es direkt auf die Einstellung -compose over
folgt, wird diese Einstellung ungültig!
Mit anderen Worten: Sie können auch die Einstellung -compose over
(Zeile 19) aus dem vollständigen Befehl überspringen.
Diese Unterlassung sollte für das Endergebnis keinen Unterschied machen.
Zeile 21: -composite
"- zusammengesetzt" ist (noch :) ein Bildsequenzoperator .In unserem Fall wird dies den Algorithmus "copy_opacity" auf das zusammengesetzte Bild anwenden.
Dadurch wird der angegebene Kanal, Opazität, vom Quellbild auf denselben Kanal im Zielbild kopiert.
Zeile 22: output.png
Diese Zeile legt den Namen des Ausgabebilds fest.
+write filename
ein
Falls Sie nicht damit vertraut sind, hier ein zusätzlicher Hinweis.
Sie können
einfügen %Vor% (fast) überall in der Befehlszeile - sogar mehrmals. Der Operator write
schreibt dann das aktuell geladene Bild (oder die aktuell geladene Bildsequenz) in seinem aktuell verarbeiteten Zustand an das angegebene Ausgabeziel.
Dieses Ausgabeziel kann eine Datei sein oder show:
oder was auch immer sonst für IM-Ausgaben gilt. Nach dem Schreiben in die Ausgabe wird die Verarbeitung des ursprünglichen Befehls fortgesetzt und fortgesetzt.
Natürlich ist es nur sinnvoll, +write
nach dem ersten (oder einem anderen) Bild (Sequenz) operator einzufügen (nicht nach einem Bild Einstellungen ) - - Sonst hat sich die aktuelle Bildliste nicht geändert.
Wenn mehrere Bilder ausgegeben werden (weil die aktuelle Bildliste aus mehr als einem Bild besteht), weist ImageMagick dem entsprechenden Dateinamen automatisch Indexnummern zu.
Das ist ein toller Trick! Wenn Sie es für Ihre eigene ImageMagick-Befehlsentwicklung verwenden, werden Sie es bald unentbehrlich finden. Es hilft enorm beim Debuggen (oder Optimieren, Optimieren, Vereinfachen ...) komplexer Befehlseinstellungen.
+write filename
Wenn Sie ein visuelles Verständnis über die obige zeilenweise Erläuterung von Bildeinstellungen, Bildoperationen und Bildsequenzoperationen benötigen, führen Sie diesen modifizierten Befehl aus. Sehen Sie sich die einzelnen Bilder an, die mit den +write
-Befehlen erstellt wurden, und vergleichen Sie sie mit den entsprechenden Erklärungen im vierten Abschnitt dieser Antwort:
Ok, währenddessen habe ich die vorherigen Befehle auf einem Eingabebild ausgeführt. Das folgende Bild zeigt es neben dem Original. Vielleicht war das Original.png, das ich für den Test ausgewählt habe, nicht wirklich geeignet, um neben der Farbe '# a0132e' zu testen. Aber da @Thany nicht auf @MarkSetchells Kommentar geantwortet hat und um ein Beispielbild gebeten hat, musst du mit meiner Wahl leben:
Hier sind die Ergebnisse des modifizierten Befehls, der die multiplen +write
Zusätze zur ursprünglichen Befehlszeile verwendet hat.
Wie zu erwarten ist, sieht original.png genauso aus wie sein Klon, ebenso wie einige andere geklonte Bilder.
Mehrere Dateinamen mit identischen Präfixen 1---
, 2---
, ... ergeben sich aus dem gleichen +write
-Befehl, der mehrere Bilder zum Speichern in der aktuell geladenen Bildliste gefunden hat.
Überprüfen Sie, ob meine Aussage zu Zeile 19 oben durch Zeile 20 für ungültig erklärt wurde. Entfernen Sie -compose over
von der Befehlszeile und testen Sie, ob das Ergebnis immer noch das gleiche ist.
Diese Antwort habe ich ursprünglich geschrieben, um die Befehlszeile, die @dlemstra gegeben hat, im Detail zu erklären. Die Antwort von Dirk basiert auf einem ImageMagick-Skript, das von Fred Weinhaus geschrieben wurde, color2alpha . Ich habe mich erst jetzt Fred's Skript genauer angesehen:
Freds Skript bietet einige zusätzliche und sehr raffinierte Optionen:
ImageMagick hat keinen eingebauten Alpha-Farbalgorithmus. Fred Weinhaus hat die folgende Lösung gefunden, die fast die gleiche ist wie das Farb-zu-Alpha-Plugin von GIMP.
%Vor%Tags und Links gimp imagemagick imagemagick-convert