HowTo:
Die Photoshop-Filter Factory in Director nutzen
|
|
Home
Workshop-Seite
|
Dieser
Artikel ist ein Beitrag von Joachim Baur (baur@medien-werkstatt.com).
Was
ist die Filter Factory?
Die
Filter Factory ist ein programmierbarer Photoshop-Filter-Generator.
Sowohl die Filter Factory selbst als auch die mit ihr erzeugten
eigenständigen Filter können direkt in Director
zur Bearbeitung von Bitmap-Castmembern eingesetzt werden - allerdings
nur im Authoring-Modus, nicht beim Abspielen im Projektor.
Inhaltsübersicht
|


 |
|
|
Wozu
brauche ich die Filter Factory?
Die
FF ist kein Werkzeug, das jeden Tag zum Einsatz kommt. Viele Dinge,
die mit der FF möglich sind, kann Photoshop selbst einfacher
und komfortabler. Aber die FF ist in den speziellen Fällen
sehr hilfreich, bei denen viele bereits in Director importierte,
umbenannte und bearbeitete Grafiken im Nachhinein verändert
werden müssen. Die Alternative dazu ist meist nur der komplette
Neuimport nach einer Bearbeitung des Ausgangsmaterials in Photoshop.
Ein (völlig aus der Luft gegriffenes) Beispiel: Der Grafiker
arbeitet auf Mac, die Präsentation der Demo erfolgt ebenfalls
auf dem Mac, der Kunde ruft nach Auslieferung der Beta an und reklamiert
die Produktfotos, die auf seinem PC zu dunkel dargestellt werden...
Oder in allen Navigationsgrafiken soll das Orange einen Tick leuchtender
und gelblicher werden... Deadline, hektische Anrufe bei externen
Dienstleistern, Überstunden, Sonnenaufgang - wie gesagt, alles
völlig aus der Luft gegriffen.
Wo
finde ich die Filter Factory?
Adobe
liefert die FF auf der Photoshop-Programm-CD in dem ziemlich versteckten
Verzeichnis "Other Goodies/Optional Plug-Ins/Filter Factory"
aus. Dort findet man auch ein paar Beispielanwendungen und ein kleines
Tutorial-PDF.
Im Internet kann man sich diese Dateien für PC von folgender
Adresse herunterladen (Größe ca. 400 KB):
ftp://ftp.i-us.com/pluginhead/ffactory.zip
Die FF unterliegt keinen erkennbaren Lizenzbestimmungen, es ist
auch nicht nötig, Photoshop zu besitzen - die FF kann
direkt in Director verwendet werden.
Wie
installiere ich die Filter Factory?
Einfach
die Datei "FFACTORY.8BF (PC)" bzw. "Filter Factory"
(Mac) in das Xtras-Verzeichnis der Director-Anwendung kopieren,
Director (neu) starten, fertig. Die FF ist jetzt unter dem Menüpunkt
"Xtras -> Filter Bitmap...", Kategorie "All"
bzw. "Synthetic" verfügbar, sobald
1. ein oder mehrere Bitmap-Castmember im Besetzungsfenster ausgewählt
sind, oder
2. das Malfenster aktiv im Vordergrund ist, oder
3. eine Auswahl (Rechteck, Lasso, Kreis) im Malfenster aufgezogen
worden ist (der Filter wird dann natürlich auch nur auf die
Auswahl angewandt)
ACHTUNG! Methode 1 funktioniert
NICHT bei Castmembern mit Alphakanal! Dies zerstört
den Alphakanal - selbst bei sofortigem Drücken von "Cancel"
in der FF! Bei Castmembern mit Alphakanal muß Methode 2 oder
3 angewandt werden.
|


 |
|
|
Wie
arbeitet die Filter Factory?
Nach
dem Aufruf der FF wird dieses karge Dialogfenster angezeigt:

Links
oben ist eine Preview des Bitmaps zu sehen (hier durch das weiße
Rechteck mit dem diagonalen Kreuz dargestellt), an dem die Auswirkungen
der Filterung gezeigt werden - allerdings nicht immer korrekt! Das
endgültige Resultat unterscheidet sich vor allem bei Verschiebe-Funktionen
deutlich von der Vorschau.
Rechts
daneben sind 8 Schieberegler mit einem Wertebereich von 0....255,
die alle zu Anfang auf 0 stehen (unterteilt in Map 0...3). Diese
8 Regler sind für sich genommen funktionslos, die an ihnen
eingestellten Werte müssen erst durch die eingetippten Formeln
interpretiert werden.
Unter
dem Preview und den Maps kommt der spannende Bereich:
3 Eingabefelder mit der Bezeichnung "R", "G"
und "B" für die drei Farbkanäle... Beim ersten
Aufruf der FF stehen dort ganz einfach die linearen Entsprechungen
der Kanäle ("r", "g", "b"), d.h.
dieser "Nullfilter" gibt für jeden Farbkanal den
Ausgangswert zurück, ändert also erstmal gar nichts, wie
man am Preview auch erkennen kann. In diese Zeilen werden nachher
die Berechnungsformeln geschrieben.
Dann
sind da noch die Buttons
"Load": Die Formeln in den RGB-Eingabezeilen werden
aus einer vorher gespeicherten Textdatei gelesen
"Save": Die Formeln aus den RGB-Eingabezeilen werden
in eine solche Textdatei gespeichert (die Textdatei ist noch kein
eigenständiger Filter, sondern quasi der Filter-Quellcode)
"Make": Das erzeugt jetzt wirklich einen eigenständigen
Filter, der in Photoshop und Director ganz regulär eingesetzt
werden kann. Zum "Make"-Dialogfenster nachher noch etwas
mehr.
"Ok": Wendet den Filter auf die ausgewählten
Bitmaps an, speichert ihn aber nicht (während einer Director-Session
merkt sich die FF zwar die eingegebenen Formeln, aber nach dem Beenden
von Director sind sie futsch).
|


 |
|
|
Was
kann ich in die Eingabefelder eintragen?
Die
RGB-Eingabefelder erwarten jeweils eine mathematische Formel nach
der FF-Syntax. Groß- und Kleinschreibung sind extrem wichtig,
außerdem wird links neben dem Eingabefeld solange ein kleines
Warndreieck angezeigt, bis die FF die Formel "versteht".
Solange also das Dreieck angezeigt wird, funktioniert der eingegebene
Code nicht (auch wenn er eigentlich richtig sein müßte,
passiert mir öfter). Dann hilft nur Ausprobieren, Klammern
weglassen, Teile vertauschen u.ä.
Außerdem sind die Eingabefelder in ihrer Länge begrenzt
- allerdings nicht auf eine bestimmte Zeichenanzahl, sondern abhängig
von der Art der eingegebenen Formeln auf ca. 3-5 Zeilen Code. Die
FF ist also kein einigermaßen komfortabler Serienwagen, sondern
eher eine sperrige Seifenkiste für den hartnäckigen Schrauber.
Wer jetzt weiterliest, weiß, worauf er sich einläßt...
Hier
eine sehr kurze Einführung in den Befehlssatz:
| *,
/, % |
Mal, Geteilt
und Modulo ("mod" in Lingo) |
| +,
|
Plus, Minus |
| &&,
|| |
Logisches
"Und", "Oder" (wie "and" und "or"
in Lingo) |
| ==,
!= |
Ist gleich,
ist Ungleich (wie "=" und "<>" in
Lingo) |
| <,
<=, >, >= |
Vergleichsoperatoren,
wie in Lingo |
| ?
: |
Bedingungsoperator
{Bedingung}?{trueExpression}:{falseExpression} entspricht Lingo-Syntax
"If {Bedingung} then {trueExpression} else {FalseExpression}
endif" |
| r,
g, b |
Roter,
grüner und blauer Wert des aktuellen Pixels |
| x,
y |
x- und
y-Koordinaten des aktuellen Pixels, (0/0) ist links oben |
| m |
Entfernung
des aktuellen Pixels zum Bildmittelpunkt (z.B. für Kreisberechnungen) |
| X |
Breite
des Bitmaps (oder der Auswahl) in Pixeln, x hat also Werte von
0...X |
| Y |
Höhe
des Bitmaps (oder der Auswahl) in Pixeln, y hat also Werte von
0...Y |
| M |
Halbe Länge
der der Bitmap-Diagonalen (oder der Auswahl) in Pixeln, m hat
also Werte von 0...M |
Eigene
Variablen können nicht definiert werden, auch eine Kommunikation
mit Director (Austausch von Variablen oder Werten) ist nicht möglich.
Die FF geht das übergebene Bitmap Pixel für Pixel durch,
wendet die RGB-Formeln an und gibt dann das Ergebnis wieder als
Bitmap an Director zurück.
|


 |
|
|
Einsatz
der Schieberegler
Um
den Kontrast und die Sättigung eines Director-Castmembers deutlich
zu erhöhen, ist die folgende "Holzhammer"-Formel
ausreichend ("R:", "G:" und "B:" selbst
nicht eintippen, nur die Formeln dahiner ;-):
R:
r*r/128
G:
g*g/128
B:
b*b/128
Jeder
Farbkanal wird zuerst mit sich selbst multipliziert. Das würde
aber schnell dazu führen, daß das berechnete Bild zum
größten Teil aus Weiss (RGB 255/255/255) besteht, da
alle Farbwerte größer 15 nach der Multiplikation mit
sich selbst diese Grenze überschreiten. Deshalb wird noch durch
128 geteilt, um das Ergebnis wieder in einen sinnvollen Bereich
zurückzuskalieren:
 |
 |
| Bitmap
vor der Filterung |
Bitmap
nach der Filterung |
Eine
Veränderung des Skalierungswerts im Bereich von 1...255 erreicht
verschieden starke Sättigungs- und Kontraständerungen,
daher liegt es nahe, den Skalierungsfaktor dynamisch durch einen
Schiebregler einzustellen. Das wird mit dieser Formel erreicht:
R:
r*r/(ctl(0)+1)
G:
g*g/(ctl(0)+1)
B:
b*b/(ctl(0)+1)
Der
Befehl ctl(0) liest den aktuellen Wert des Schiebereglers Nummer
0 aus, die +1 sorgt nur dafür, dass keine mathematisch unzulässige
Division durch den Wert 0 erfolgen kann. Wenn jetzt der oberste
Schieberegler im FF-Dialogfenster bewegt wird, zeigt sich am Preview
sofort die daraus resultierende Sättigungs- und Kontraständerung.
Diesen
Filter können wir auch mit dem "Make"-Button
als eigenständigen Filter sichern. Ein Klick auf den Button
öffnet dieses Dialogfenster:
Wichtig
sind hier vor allem die Felder "Category" und "Title",
unter denen der fertige Filter dann im "Xtras-> Filter Bitmap"-Dialog
erscheint. Außerdem müssen wir die Checkbox neben "Control
0" ankreuzen und in das nebenstehende Textfeld die Bezeichnug
für diesen Schieberegler eingeben (z.B. "Stärke").
Nach "OK" fragt ein "Speichern unter..."-Dialog
nach Namen und Verzeichnis für den fertigen Filter, hier kann
gleich das Director-"Xtras"-Verzeichnis gewählt werden.
Allerdings muß Direcor beendet und neu gestartet werden, bevor
der eigene Filter im Auswahldialog auftaucht.
|


 |
|
|
Selektives
Freistellen mit und ohne Toleranz
Ein
nettes Beispiel für den sinnvollen Einsatz der FF ist die kürzlich
in der Director_List aufgetauchte Frage zum Freistellen eines bestimmten
Farbbereichs (ein Blauton soll durch Weiss ersetzt werden) bei einer
großen Anzahl Bildern. Das kann natürlich auch manuell
mit dem Farbeimer im Malfenster erreicht werden, aber die FF bietet
hier u.a. den Vorteil, mit einer Toleranz für diesen Blauwert
zu arbeiten, so daß auch direkt angrenzende Farbwerte mit
gelöscht werden (etwa bei nicht völlig gleichmäßiger
Beleuchtung oder an weichen Übergangen innerhalb des Bildmotivs).
Hier zuerst die Formel zum Ersetzen eines absoluten RGB-Werts (Violett,
RGB 120/0/135) durch Weiss (RGB 255/255/255)
R:
r==120&&g==0&&b==135?255:r
G:
r==120&&g==0&&b==135?255:g
B:
r==120&&g==0&&b==135?255:b
Es
wird für jeden Kanal verglichen, ob der aktuelle Pixel genau
den RGB-Wert 120/0/135 hat, falls ja wird 255 in den jeweiligen
Kanal geschrieben, falls nein wird der ursprüngliche Kanalwert
belassen. Und hier das Ergebnis anhand eines Farbverlaufs von Rot
nach Blau:
 |
 |
| Bitmap
vor der Filterung |
Bitmap
nach der Filterung |
Mit
Toleranz kann ein ganzer Farbbereich ersetzt werden, in dem
vom Ausgangs-RGB-Wert 120/0/135 jeweils der Toleranzwert abgezogen
bzw. dazugezählt wird. Für einen Toleranzwert von 5 werden
also alle Farbtöne ersetzt, die zwischen RGB 115/0/130 und
125/0/140 liegen, es ergibt sich ein Toleranzbereich von 10 Farbstufen
(nicht Pixeln...!).
Als
Formel mit Verwendung von Schieberegler 0 zur Einstellung des Toleranzwerts
sieht das folgendermaßen aus:
R:
r>=(120-ctl(0))&&r<=(120+ctl(0))&&g>=(0-ctl(0))&&
g<=(0+ctl(0))&&b>=(135-ctl(0))&&b<=(135+ctl(0))?255:r
G:
r>=(120-ctl(0))&&r<=(120+ctl(0))&&g>=(0-ctl(0))&&
g<=(0+ctl(0))&&
b>=(135-ctl(0))&&b<=(135+ctl(0))?255:g
B:
r>=(120-ctl(0))&&r<=(120+ctl(0))&&g>=(0-ctl(0))&&
g<=(0+ctl(0))&&b>=(135-ctl(0))&&b<=(135+ctl(0))?255:b
 |
 |
| Bitmap
vor der Filterung |
Bitmap
nach der Filterung, Reglereinstellung 10 |
Und
abschließend noch die "Königsformel" für
das Freistellen/Farbersetzen mit Toleranz unter Verwendung von 7
(!) Schiebereglern
Regler
Nr. 0, 1, 2 stellen den R, G, B-Wert der auszutauschenden Farbe
ein (das Violett im obigen Beispiel)
Regler
Nr. 3 stellt die Toleranz ein
Regler
Nr. 4, 5, 6 stellen den R, G, B-Wert der Ersatzfarbe ein (war im
obigen Beispiel noch fest eingestellt mit 255/255/255 für Weiss)
R:
r>=(ctl(0)-ctl(3))&&r<=(ctl(0)+ctl(3))&&g>=(ctl(1)-ctl(3))&&
g<=(ctl(1)+ctl(3))&&b>=(ctl(2)-ctl(3))&&b<=(ctl(2)+ctl(3))?ctl(4):r
G:
r>=(ctl(0)-ctl(3))&&r<=(ctl(0)+ctl(3))&&g>=(ctl(1)-ctl(3))&&
g<=(ctl(1)+ctl(3))&&b>=(ctl(2)-ctl(3))&&b<=(ctl(2)+ctl(3))?ctl(5):g
B:
r>=(ctl(0)-ctl(3))&&r<=(ctl(0)+ctl(3))&&g>=(ctl(1)-ctl(3))&&
g<=(ctl(1)+ctl(3))&&b>=(ctl(2)-ctl(3))&&b<=(ctl(2)+ctl(3))?ctl(6):b
Hier
der Preview bei einer zu ersetzenden Ausgangsfarbe von RGB 120/0/135
(oberste 3 Regler), einer Toleranz von 20 Farbstufen (4. Regler)
und einer Ersatzfarbe von RGB 9/255/76 (grün, Regler 5-7):

Jetzt
fehlt nur noch ein Farbaufnehmer (Pipette)...
|


 |
|
|
Differenzbildberechnung
Eine
Differenzbildberechnung ist immer dann gefordert, wenn es wichtig
ist, daß nach dem Vergleich zweier Bitmaps als Ergebnis nur
die unterschiedlichen Pixel übrig bleiben. Als Beispiel hier
das Paprikabild original und mit einer blau gefärbten Paprika:
Wenn
jetzt in Director ein "Paprika-Konfigurator" verlangt
ist, bei dem die Farben der Paprikas interaktiv geändert werden
sollen, muß das rechte Bild so beschnitten/freigestellt werden,
dass nur die "blauen" (= vom Originalbild verschiedenen)
Pixel übrig bleiben (denn wenn die grüne Paprika "konfiguriert"
wird, darf das Sprite der gelben nicht in die grüne hineinragen...).
Falls das nicht sowieso schon vom Grafiker richtig angeliefert worden
ist ;-), kommt jetzt ein ziemlich mühseliger und suboptimaler
manueller Freistellungsprozeß in Gange (... Malfenster mit
vergrößerter Darstellung und Radierer-Werkzeug...), oder
aber die FF macht das schnell und sauber.
Dabei stößt man sofort auf das Problem, das der FF keine
zwei Bitmaps übergeben werden können, die sie miteinander
vergleichen kann. Also muß als Workaround das erste Bild im
zweiten mit übergeben werden, als linke Hälfte z.B. (ist
in Director noch relativ einfach zu bauen, muß aber pixelgenau
sein!). Die FF-Formel vergleicht jetzt die linke Bildhälfte
mit der rechten, löscht in der linken Bildhälfte alle
Pixel und in der rechten nur die identischen:
R:
put(x<(X/2)?255: dif(src(x-(X/2),y,0),src(x,y,0))==0&&dif(src(x-
(X/2),y,1),src(x,y,1))==0&&dif(src(x-(X/2),y,2),src(x,y,2))==0,
0),get(0)?255:r
G:
get(0)?255:g
B:
get(0)?255:b
Die
Befehle put(wert,0) und get(0) benützen eine der PlugIn-internen
Zwischenablagen, damit die Mammutberechnung nicht für alle
drei Kanäle separat durchgeführt werden muß. Das
hätte auch bei den vorigen Beispielen schon funktioniert (immer
dann, wenn in allen drei Kanälen exakt dieselbe Berechnung
durchgeführt wird), ist aber nicht existenziell sondern nur
schneller in der Ausführung.
Und
so sieht das Ergebnis aus:

Der
einzige Haken an dieser Differenzbildberechnung ist wie gesagt die
vorherige pixelgenaue Komposition der beiden Bildhälften in
Director, oder (beim Importieren bereits in Photoshop zusammengefügter
Bilder) der veränderte RegPoint gegenüber einer einzeln
importierten Bild-"Hälfte".
Mit
dem Differenzbildverfahren lassen sich auch Animationen vor statischen
Hintergründen auf die minimal nötige Dateigröße
reduzieren, interessant vor allem als Ersatz für animierte
GIFs und in Shockwave-Anwendungen, die so klein als möglich
gehalten werden sollten.
|


 |
|
|
Es
gibt noch massenweise interessante Anwendungen der FF (Kreisfreisteller
mit weicher Kante, Farbbilder korrekt in Graustufen umwandeln, Graustufenbilder
kolorieren, sogar PowerGoo-ähnliche Bilddeformationen in Spiralform...),
dafür gibt's hier Hinweise auf die
Weiterführende
Literatur
Offline:
Günter Schuler, "Das SmartBook zu Photoshop Filter Factory"
(sehr, sehr gut) DM 89,00
Online:
http://www.pluginhead.i-us.com/
http://privat.schlund.de/f/filter-factory/
http://www.netins.net/showcase/wolf359/plugff.htm
http://www.kt.rim.or.jp/~takinami/
Schlußwort
So,
falls die/der eine oder andere unter Euch bis hierher gelesen hat,
hoffe ich, daß mein kleiner Aufsatz ein bißchen geholfen
oder auch nur ein paar Anstöße gegeben hat :-) Kritik,
Anregungen und Kommentare hierzu gerne an:
Joachim
Baur | medienwerkstatt | grafik-design
|


 |
|