D7WS HOMEPAGE WORKSHOP NEUE XTRAS GALERIE WORKSHOP Automatic Translation LESERSERVICE BUCH NEWS

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





Directorworkshop.de ist © Joachim Gola & Gerd Gillmaier 1998-2002. Alle Rechte vorbehalten.