Schnelle, einfache und kostenlose Bildbearbeitung: ImageMagick und Rmagick (Ruby)

Jeder, der sich in diesem Artikel nun die Vorstellung eines Adobe Photoshop Konkurrenten erhofft, darf sich getrost dem nächsten Artikel zuwenden. Mit ImageMagick und der passenden Schnittstelle zu Ruby mit dem Namen RMagick kann man auf einfache Art und Weise Bilder mittels eines Scripts bearbeiten. Was ImageMagick unter bearbeiten versteht, führt folgende Liste auf:

  • Format conversion: convert an image from one format to another (e.g. PNG to JPEG)
  • Transform: resize, rotate, crop, flip or trim an image
  • Transparency: render portions of an image invisible
  • Draw: add shapes or text to an image
  • Decorate: add a border or frame to an image
  • Special effects: blur, sharpen, threshold, or tint an image
  • Animation: create a GIF animation sequence from a group of images
  • Text & comments: insert descriptive or artistic text in an image
  • Image identification: describe the format and properties of an image
  • Composite: overlap one image over another
  • Montage: juxtapose image thumbnails on an image canvas
  • Motion picture support: read and write the common image formats used in digital film work
  • Image calculator: apply a mathematical expression to an image or image channels
  • High dynamic-range images: accurately represent the wide range of intensity levels found in real scenes ranging from the brightest direct sunlight to the deepest darkest shadows
  • Encipher or decipher an image: convert ordinary images into unintelligible gibberish and back again
  • Virtual pixel support: convenient access to pixels outside the image region
  • Large image support: read, process, or write mega- and giga-pixel image sizes
  • Threads of execution support: ImageMagick is thread safe and most internal algorithms are OpenMP-enabled to take advantage of speed-ups offered by the dual and quad-core processor technologies

Nutzen? Jeder der eine automatisierte Umgebung verwaltet, einen performanten Batchjob oder einfach eine Serveranwendung schreiben möchte, ist mit ImageMagick bestens beraten. Die Bibliothek bietet Schnittstellen zu mehr oder minder allen Frameworks und Programmiersprachen (Ruby, C, Perl, C#, etc ..) und fühlt sich unter MacOX 10.5 (und älteren) pudelwohl!

Anwendungsbeispiel aktuell: eine recht aufwändige Bildberechnung in Photoshop, mit Maske, Alpha-Ebene und transparenten PNGs berechnete nach jedem Fotoshooting zwischen 100 bis 300 Bilder, damit diese ins Internet (Partyfotos) geladen werden konnten. Mit Ruby erstellte ich ein simples Programm, welches die Bilder nicht nur bearbeitete, sondern im Anschluss auch automatisch auf den Webserver laden konnte. Der gesamte Prozess konnte somit sogar auf den Webserver selbst verlagert werden und von jedem genutzt werden!

Wie geht’s? Voraussetzung! Um mit Ruby und Ruby Gems (eine Art Installer) arbeiten zu können, ist vielleicht etwas mehr als das „normale“ MacOS Wissen erforderlich. Man sollte sich allerdings von keiner Terminalarbeit abschrecken lassen. Viel Zauberkunst ist nicht dabei! Voraussetzung: die Installation von Apples XCode (bzw. den Developer Tools). Diese werden benötigt, damit die geladenen Tools compiliert werden können. Sie liegen kostenlos bei developer.apple.com zum Download bereit (Registrierung erfroderlich) oder können über die MacOS Leopard DVD nachinstalliert werden. Möchte man Ruby als Programmiersprache verwenden, dann sollte auch die nötige Umgebung vorhanden sein. Wenn man auf MacOS Leopard arbeitet, so fällt dieser Schritt weg – Ruby ist schon an Bord! Die Version kann mittels Terminal kontrolliert werden (Terminal befindet sich in Programme->Dienstprogramme). Einfach „ruby –version“ eintippen.

Ruby Version check

Ruby Version check

Unter MacOS Tiger empfehle ich den Einsatz von MacPorts – dieses Programm hilft bei der Installation ungemein.

Sollte man das erste Mal mit Ruby unter MacOS Leopard arbeiten, empfehle ich gleich vorweg folgenden Befehl auszuführen:“sudo gem update –system“ (Ohne Anführungszeichen!). Dieser Befehl führt nach Eingabe des Kennwortes zu einem Systemupdate von Ruby und Gems.

Voraussetzungen sind da – nun geht es los! Ruby und Apple Developer Tools sind da … nun wird ImageMagick und RMagick installiert. Diese stellen die Programme für die Bildbearbeitung zur Verfügung. ImageMagick ist dabei der essentielle Kern (die Basis). RMagick ist lediglich das Bindeglied, damit Ruby auf die Basis zugreifen kann. Da ImageMagick selbst aber ein paar Tools benötigt (so zum Beispiel ein Hilfstool für die Bearbeitung von JPEG Dateien), gestaltet sich der Installationsprozess in der Regel recht aufwändig. Einfacher geht es mit einer einzelnen Installationsdatei – die ich hiermit in aktueller Fassung (01.02.2009) zur Verfügung stelle: DOWNLOAD.

Der Inhalt der Datei ist einfach:

#!/bin/sh
# Updated 01.02.2009
# Updated by Andreas Unterhuber, blog.directorgate.com

curl -O http://download.savannah.gnu.org/releases/freetype/freetype-2.3.5.tar.gz
tar xzvf freetype-2.3.5.tar.gz
cd freetype-2.3.5
./configure –prefix=/usr/local
make
sudo make install
cd ..

curl -O http://superb-west.dl.sourceforge.net/sourceforge/libpng/libpng-1.2.22.tar.bz2
tar jxvf libpng-1.2.22.tar.bz2
cd libpng-1.2.22
./configure –prefix=/usr/local
make
sudo make install
cd ..

# Neuer Downloadlink, da ursprüngliche Quelle fehlerhaft
curl -O http://blog.directorgate.com/download/jpegsrc.v6b.tar.gz
tar xzvf jpegsrc.v6b.tar.gz
cd jpeg-6b
ln -s `which glibtool` ./libtool
export MACOSX_DEPLOYMENT_TARGET=10.5
./configure –enable-shared –prefix=/usr/local
make
sudo make install
cd ..

curl -O ftp://ftp.remotesensing.org/libtiff/tiff-3.8.2.tar.gz
tar xzvf tiff-3.8.2.tar.gz
cd tiff-3.8.2
./configure –prefix=/usr/local
make
sudo make install
cd ..

curl -O http://jaist.dl.sourceforge.net/sourceforge/wvware/libwmf-0.2.8.4.tar.gz
tar xzvf libwmf-0.2.8.4.tar.gz
cd libwmf-0.2.8.4
make clean
./configure
make
sudo make install
cd ..

curl -O http://www.littlecms.com/lcms-1.17.tar.gz
tar xzvf lcms-1.17.tar.gz
cd lcms-1.17
make clean
./configure
make
sudo make install
cd ..

curl -O ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/GPL/gs860/ghostscript-8.63.tar.gz
tar zxvf ghostscript-8.63.tar.gz
cd ghostscript-8.63/
./configure  –prefix=/usr/local
make
sudo make install
cd ..

curl -O ftp://mirror.cs.wisc.edu//pub/mirrors/ghost/fonts/ghostscript-fonts-std-8.11.tar.gz
tar zxvf ghostscript-fonts-std-8.11.tar.gz
sudo mv fonts /usr/local/share/ghostscript

# Nun die notwendige Basis „ImageMagick“ laden und compilieren
curl -O ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick-6.4.8-10.tar.gz
tar xzvf ImageMagick-6.4.8-10.tar.gz
cd ImageMagick-6.4.8-10
export CPPFLAGS=-I/usr/local/include
export LDFLAGS=-L/usr/local/lib
./configure –prefix=/usr/local –disable-static –with-modules –without-perl –without-magick-plus-plus –with-quantum-depth=8 –with-gs-font-dir=/usr/local/share/ghostscript/fonts
make
sudo make install
cd ..

# Ruby Schnittstelle laden und installieren
sudo gem install rmagick

VORSICHT: nicht copy&paste vom oberen Code (Zeilenumbruch!). Anstelle die bereits erwähnte Installations-Datei laden.

Steps zur Installation:

  1. Laden der oben erähnten Image-Magick Installationsdatei (Download)
  2. Erstellen eines Ordners im Finder (am besten direkt in „Macintosh HD“)
  3. Geladene Datei entpacken (falls noch nicht geschehen) und in den erstellten Ordner legen.
  4. Terminal öffnen
  5. Im Terminal: „cd /NAMEdesORDNERS/“ eintippen (falls der Ordner wo anders erstellt wurde, entsprechend anpassen). Nun befindet man sich im Ordner mit der „.sh“ Datei.
  6. Im Terminal „chmod +x InstallRMagickGem.sh“ eingeben
  7. Sicherstellen, dass Internetverbindung steht
  8. Im Terminal „sudo InstallRMagickGem.sh“ eingeben
  9. Passwort eingeben
  10. … abwarten … Installation läuft!

Nach der Eingabe des Passwortes (Schritt 9) läuft die Installation an und kann – je nach Rechner und Internetverbindung – einige Zeit in Anspruch nehmen. Nach der Installation sollte ImageMagick (im Ordner „/usr/local/“) und RMagick installiert sein und einer effizienten Bildbearbeitung steht nichts mehr im Wege. Ein kleines Beispielscript generiert beispielsweise Thumbnails aus dem angegeben Bild: download des scripts.

Thumbnail Generierung mit Ruby

Thumbnail-Generierung mit Ruby

Der tatsächliche Code wäre gerade mal 5 Zeilen lang …

Hinweise am Rande: die auf mehreren Webseiten vorkompilierten Dateien für ImageMagick sind allesamt mehr oder minder zu vergessen. Die Installation funktioniert entweder nicht oder die Einbindung in MacOS ist mangelhaft. Die beschriebene Variante ist zur Zeit die einzige sauber funktionierende!
Ruby ist eine äußerst insteressante Programmiersprache, die ich nun immer öfter sogar als AppleScript Ersatz heranziehe (es sei denn mit AppleScript werden andere Programme gesteuert). Ein Blick auf die Webseiten von Ruby und Ruby on Rails (Webframework) lohnt sich.

Über den Autor

Andreas Unterhuber studierte Wirtschatfsinformatik und ist seit 2007 Geschäftsführer der KIM Keep In Mind GmbH mit Sitz in Bozen. Mit seinem Fachwissen in Video Encoding, diverser Programmiersprachen sowie in Datenbanken und Serversystemen unterstützt er zahlreiche nationale und internationale IT Projekte.