[Chaos CD][Datenschleuder] [71]
  [Chaos CD]
[Datenschleuder] [71] First international GIMP Developers Conference
[Gescannte Version] [ -- ] [ ++ ] [Suchen]  

First International GIMP Developers Conference

Vom 2. bis zum 4. Juni fand in den Chaos-Räumen in der Berliner Marienstraße die erste internationale GIMP-Entwicklerkonferenz statt. GIMP, das GNU Image Manipulation Program ist ein mächtiges Retuschier- und Kompositionswerkzeug für Pixel-basierte Bilder, das in seiner Funktionalität mit Adobe Photoshop vergleichbar ist.

von: Mitch
am: 00. Fnord 0000,

Unter den 20 Teilnehmern der GimpCon [Externer Link]http://www.gimp.org/gimpcon/ [Externer Link]http://www.gimp.org/ war ein Großteil der derzeitigen Core-Entwickler sowie einige Power-User und GIMP-Veteranen.

Ziel der Konferenz war es, das Design der zukünftigen GIMP Version 2.0 zu spezifizieren bzw. sich darüber klar zu werden, was man sich davon eigentlich erwartet.

Der Stand der Dinge (GIMP 1.2):

Die (bald) aktuelle stabile Version 1.2, deren Release diesen Sommer erwartet wird, weist im Vergleich zum größten "Konkurrenten", Photoshop, einige Stärken, jedoch auch Schwächen auf. Das größte Manko, nämlich die fehlende Unterstützung für den CMYK Farbraum, soll nicht verschwiegen werden. Jedoch erweist sich GIMP als Meister des RGB Farbraums und es ist wohl nicht übertrieben zu sagen, daß GIMP das Werkzeug zum Erstellen von WEB-Grafiken ist.

Ein GIMP-Dokument besteht aus Layers (Ebenen), einer optionalen Maske je Layer sowie einer beliebigen Anzahl von zusätzlichen Schmuckfarbenkanälen. Desweiteren gehören eventuell vorhandene Bezier-Pfade sowie die aktuelle Auswahl (Selection) zu den persistenten Informationen. Zum Bearbeiten dieser Bilder bietet GIMP etliche Retuschier- und Zeichenwerkzeuge, Farbkorrekturtools sowie verdammt viele Plug-Ins. Die Palette der Plug-Ins umfaßt zahlreiche Datei Import- und Export-Filter, einfache Pflicht-Effekte wie Weichzeichnen oder Rauschen, mächtige Tools zum Erstellen von Animationen, Clickable Imagemaps etc. Viele Plug-Ins erzeugen Bilder "from scratch" aus Fraktalen, iterativen Funktionssystemen oder genetischen Algorithmen genauso wie aus Rauschen oder anderen einfachen Operatoren, deren Resultate oft überraschend sind. GIMP ist voll über seine Plug-In Schnittstelle steuerbar, auf die verschiedene Scripting-Interfaces aufsetzen: Teil von GIMP 1.2 ist Script-Fu, das Scheme-Syntax verwendet und eine Perl-Schnittstelle, die die direkte Manipulation von Pixel-Daten zuläßt.

Den Kern von GIMP 1.2 möchte man nicht wirklich als "High Tech" bezeichnen. Schicke Dinge wie CMYK oder 16 Bit Farbtiefe sind einfach nicht vorgesehen und auf dieser Codebasis weiterzuprogrammieren wäre eine Qual. Dieser Teil wird also den Sprung nach 2.0 nicht überleben und komplett neu programmiert.

Am User Interface hat sich jedoch seit den Tagen von GIMP 1.0 (was nun immerhin schon fast zwei Jahre her ist) einiges getan: So gut wie alles ist Drag'n'Drop-bar (Layers, Brushes, Farben etc.), das Interface hat ein konsistentes "Look and Feel", Längeneinheiten (cm, inches, ...) werden durchgehend unterstützt, es gibt eine Undo-History (und übrigens beliebig viele Undo-Schritte), einen Navigations-Dialog und ein eingebautes Hilfe-System. GIMP macht ausgiebigen (aber inzwischen konsistenten) Gebrauch der Modifier-Tasten und aller drei Maus-Buttons, was die Lernkurve zu Beginn recht steil macht, jedoch dem geübten Benutzer ein sehr zügiges Arbeiten ermöglicht.

Das Hauptprogramm sowie die meisten Plug-Ins verwenden vorgefertigte Widgets (so heissen die UI-Elemente des GIMP Toolkit (Gtk+ [Externer Link]http://www.gtk.org/) aus der "libgimpui", so daß auch hier Konsistenz gewährleistet ist. Leider ist Vorhandensein und Qualität eines Previews der Willkür des einzelnen Plug-In Autors überlassen.

The Future (GIMP 2.0):

GIMP 2.0 wird kein monolithisches Programm mit einer einzelnen Plug-In Bibliothek mehr sein, sondern eine ganze Reihe von Libraries für die verschiedenem Funktionalitäten des Kerns, der Interface-Elemente und der Plug-In-Kommunikation, für die die eigentliche Anwendung "nur" noch ein ein schönes gemeinsames Interface bereitstellen muß.

Den Umgang mit Bilddaten wird die "Generic Graphics Library" (GEGL) [Externer Link]http://www.gegl.org/ übernehmen. GEGL abstrahiert vom verwendeten Farbmodell und der Farbtiefe (8 Bit, 16 Bit, float, double) und stellt generische Datentypen wie "Channel" oder "Color" zur Verfügung. Aus den mit diesen Typen implementierten Algorithmen erzeugt ein Code-Generator den eigentlichen C-Code, also eine Vielzahl von an die verschiedenen Datenformate angepaßter Funktionen. Auf dieser Ebene wird es auch möglich sein, Optimierungen z.B. für MMX oder AltiVec einzubauen ohne sie für jeden Algorithmus von Hand hacken zu müssen.

Was in GIMP 1.2 ein einfacher Layer-Stack ist, der über "Layer Modes" (Normal, Combine, Difference, ...) zusammengerechnet wird ist, wird mit GEGL zu einer Rendering-Pipeline, die man sich wie einen Baum von Layers vorstellen kann, auf dessen Wurzel man blickt. Die Knoten des Baums sind "Operatoren", die beliebig viele Ein- und Ausgänge haben können. Die Ein- und Ausgänge der Operatoren greifen auf rechteckige Regionen von Pixeldaten zu, den Kanten des Baums. Jede Kante (mit den bisherigen Layers vergleichbar) kann ihre Daten intern als Pixel, Vektoren, Text oder was auch immer vorhalten und muß nur ein Interface zum Einfügen in die Rendering-Pipeline bereitstellen.

Genauso wie man seine Layer-Typen nach Belieben implementieren kann, wird das auch mit den Operatoren möglich sein. Einfache Funktionalitäten wie Farbkorrekturen oder Weichzeichnen sind ebenso möglich wie affine Transformationen oder was-auch-immer für komplexe Bildveränderungen.

Aufbauend auf diesem Kern wird die "Core" Bibliothek Objekte wie Images, Tools, Brushes etc. implementieren. Die Interfaces all dieser "High Level" Objekte sind in einer Bibliothek definiert, und haben im Core und auf der Plug-In-Seite jeweils eigene Implementierungen.

Die Implementierung dieser Objekte in der Plug-In-Bibliothek wird aus Objektbeschreibungen komplett autogeneriert. Plug-In Programmierer erhalten auf diese Weise eine vernünftige objektorientierte Schnittstelle und nicht wie bisher ein rein prozedurales Interface. Als netten Nebeneffekt ermöglicht diese Architektur auch die Wiederverwendung von UI-Elementen in Plug-Ins und eine saubere Trennung von "Model" und "View".

Durch die Exportierung der inneren Objektstruktur an die Plug-Ins wird es möglich sein, Operatoren, Werkzeuge oder komplette Layer-Typen als Plug-Ins zu implementieren. Das Design von Layern und Tools ermöglicht es, Tools speziell für eigene Layer-Typen zu konzipieren (schließlich möchte man auf einer Vektor-Layer spezielle Vektorgrafik-Werkzeuge benutzen).

Die Kommunikation zwischen der Applikation und den Plug-Ins erfolgt über CORBA, wobei die Schnittstelle zwischen den den eigentlichen Objekten und dem ORB ebenfalls aus den Objektbeschreibungen generiert wird. Der Programmierer hat also nur Gtk-Objekte vor sich und muß sich nicht mit den Untiefen von CORBA auseinandersetzen. Der Begriff "Plug-In" hat also eher historische Bedeutung, da GIMP 2.0 ein netzwerktransparentes Client-Server System sein wird. Ein weiteres Highlight ist die Parallelisierung der eigentlichen Rechenarbeit. Schließlich will man sich nicht nur eine schicke Rendering-Pipeline zusammenbauen und abspeichern, sondern die Projektion des ganzen (den Blick auf die Wurzel des Baumes) auch sehen. Wann immer ein Update der Projektion oder eines Zwischenschritts nötig ist, wird das System automatisch alle benötigten Ressourcen locken und die Operation an den Batch-Renderer weitergeben, der in einem eigenen Thread läuft. So bleibt das ganze System stets "responsive".

Zu guter letzt wird GIMP 2.0 seine Konfigurations-Daten und Bild-Eigenschaften (außer den eigentlichen Pixel-Daten) als XML abspeichern, das Undo-System wird ein Baum und kein Stack sein (man kann also auch "Undo" rückgängig machen), alle Undo-Schritte werden persistent sein und natürlich wird es alle Features haben, die die aktuelle Version 1.2 bietet.

Auf diesem Berg von Komponenten sitzt die eigentliche GIMP-Applikation und hält alles zusammen. Der Implementierung anderer GIMP-Interfaces wie einem Video-Editing System oder der Darstellung der Rendering-Pipeline als editierbaren Graph wie man es aus der wissenschaftlichen Bildbearbeitung kennt steht also nichts im Wege.

Nicht zu vergessen... GimpCon was FUN!

Mail und IRC sind ja schön und gut, aber eigentlich will man die ganzen Leute, mit denen man jeden Tag kommuniziert auch mal persönlich treffen. Schließlich macht das Hacken mehr Spaß, wenn man seine Kollegen kennt.

Abgesehen von diesem zwischenmenschlichen Nebeneffekt hätte es auch verdammt lange gedauert, all dies übers Netz zu spezifizieren, was wir nun in drei Tagen hingekriegt haben, und ein besonders gutes Design wäre dabei wohl auch nicht 'rausgekommen.

Last but not least möchte ich im Namen aller GIMP-Hacker deshalb der Free Software Foundation (FSF) [Externer Link]http://www.fsf.org/ danken, die GimpCon großzügig finanziell unterstützt hat. Desweiteren natürlich dem Chaos für die Räume und O'Reilly für die schönen Shirts :)

 
  [Chaos CD]
[Datenschleuder] [71] First international GIMP Developers Conference
[Gescannte Version] [ -- ] [ ++ ] [Suchen]