Mehr als tausend Worte

icoutils

01.10.2002
Sie wollen Windows-Icons unter Linux nutzen und wissen nicht, wie Sie diese extrahieren? Dann lohnt sich ein Blick auf das Progammpaket icoutils.

out of the box

Es gibt tausende Tools und Utilities für Linux. "out of the box" pickt sich die Rosinen raus und stellt pro Monat ein Progrämmchen vor, das wir für schlichtweg unentbehrlich oder aber zu Unrecht wenig beachtet halten.

Wer kennt sie nicht, die kleinen Icons, die zunehmend in den Bookmarks der Browser auftauchen? Dahinter steckt die Datei favicon.ico aus dem Stammverzeichnis der Web-Präsenz. Moderne Browser nutzen das darin befindliche Icon zur Charakterisierung der jeweiligen Site.

Oft finden sich unter diesen Bildchen wahre Kunstwerke, die man gern privat verwenden würde. Auch enthält die (mittlerweile nur noch gelegentlich benutzte) Windows-Installation liebgewonnene Icons, mit denen man gern seinen Linux-Desktop bereichern will. Ein Screenshot und anschließendes Werkeln in der Bildbearbeitung wäre zwar eine Lösung, aber wer will diesen Aufwand schon für ein einzelnes Lieblingsbildchen treiben?

Dass es einfacher gehen sollte, dachte sich auch Oskar Liljeblad. Die passende, von ihm geschriebene Programmsammlung namens icoutils liegt inzwischen in Version 0.16.0 vor und kann seit Kurzem nicht nur Icons und Cursor extrahieren, sondern auch selbst ico-Dateien erstellen. Bestandteil des Pakets sind die Programme icotool, wrestool, extresso und genresscript.

Schatzgräber vom Dienst

Ersteres extrahiert Icons aus .ico- oder .cur- (Windows-Cursor-)Dateien und speichert sie im png-Format ab. wrestool nimmt sich Windows-.exe- und -.dll-Files vor und holt die darin befindlichen Bildchen heraus. Das Hilfsprogramm extresso dient als Wrapper für wrestool und icotool. Mittels eines von genresscript erstellten Skripts kann es den Umwandlungsvorgang erheblich vereinfachen, indem es nacheinander alle notwendigen Programmaufrufe abarbeitet. genresscript wiederum erstellt für eine angegebene Datei ein solches Skript, welches leider noch von Hand nachbearbeitet werden muss.

Woher nehmen?

Mandrake-8.2- oder Debian-Nutzer, so scheint es auf den ersten Blick, können sich zurücklehnen, denn ihre Distributionen enthalten das icoutils-Paket bereits. Allerdings nur in Version 0.13.0 – und da liegt auch schon der Haken: Version 0.14.0 enthält komplett umgeschriebene Tools und produziert seitdem PNG statt wie bisher XPM als Endformat. Wer selbst .ico-Dateien erzeugen will, darf sich ebenfalls nicht mit der älteren Ausgabe begnügen.

Das aktuelle Quell-Paket icoutils-0.16.0.tar.gz bekommen Sie von der Web-Seite des Autors unter http://www.student.lu.se/~nbi98oli/. Entpacken Sie es mit dem Befehl

tar -xzf icoutils-0.16.0.tar.gz

und wechseln Sie ins Verzeichnis icoutils-0.16.0. Dort sind die Dateien README und Install lesenswert. Wenn Ihnen die Installation nach /usr/local Recht ist, erledigt der altbekannte Dreisatz ./configure; make; make install die restliche Arbeit. Um make install ausführen zu können, müssen Sie vorher mittels su zu root werden, da Sie als unprivilegierter Nutzer im Normalfall keine Schreibrechte auf /usr/local haben.

Allerdings sorgt dies auch bei fehlerfreiem Ablauf nicht dafür, dass extresso, genresscript und die zugehörigen Manpages in der /usr/local-Hierarchie landen. Daher müssen Sie die Dateien icoutils-0.16.0/extresso/extresso und icoutils-0.16.0/extresso/genresscript (immer noch mit root-Rechten) von Hand nach /usr/local/bin sowie icoutils-0.16.0/extresso/extresso.1 und icoutils-0.16.0/extresso/genresscript.1 nach /usr/local/man/man1 kopieren.

Viele bunte Bildchen

Recht einfach zu vielen hübschen Icons kommen die meisten Windows-Benutzer, indem sie die Datei pifmgr.dll aus dem Windows-System-Verzeichnis in ein eigenes Verzeichnis auf dem Linux-Rechner kopieren. Mit dem Befehl

[andi@gemini test]$ wrestool -l pifmgr.dll
--type=14 --name=1 [type=group_icon offset=0xb280 size=48]
--type=14 --name=2 [type=group_icon offset=0xb5a0 size=32]
[…]
--type=5 --name=106 [type=dialog offset=0x13030 size=480]
[…]

erhalten sie eine Liste aller Ressourcen der Datei. Interessant ist vor allem Typ 14 (group_icon), da sich dahinter die Icons verbergen. Andere Inhalte, etwa Dialogboxen, listet wrestool zwar auf, kann sie aber nicht entpacken. Um die Icons zu extrahieren, geben Sie folgenden Befehl ein:

wrestool -x --output=. -t14 pifmgr.dll

Wie der . als Argument zum Output-Parameter festlegt, landen alle gefundenen .ico-Dateien durchgehend nummeriert als pifmgr.exe_t14_1.ico, pifmgr.exe_t14_2.ico etc. im aktuellen Arbeitsverzeichnis. Wählt man einen anderen Pfad, muss man den unbedingt mit einem / am Ende abschließen, wenn das Zielverzeichnis noch nicht existiert.

icotool -x @L: *.ico

wandelt nun alle .ico-Dateien ins PNG-Format um. Sofern Sie Ihren Datei-Manager (etwa Nautilus oder den Konqueror) so konfiguriert haben, dass er Ihnen eine Bildvorschau präsentiert, bietet sich Ihnen nun ein Anblick wie in Abbildung 1.

Abbildung 1: Die aus pifmgr.dll extrahierten Icons mit Nautilus betrachtet

icotool, mit dem Parameter -c (für "create") aufgerufen, erstellt aus einer oder mehreren .png-Dateien Icons, z. B.

icotool -c -o meinfavicon.ico mein_bild1.png mein_bild2.png

Die Datei meinfavicon.ico dient dabei als eine Art Container, der eine beliebige Anzahl Bilder (hier mein_bild1.png und mein_bild2.png) aufnimmt. Man nutzt diese Eigenart des Dateiformats hauptsächlich, um das gleiche Bild in mehreren Farbtiefen und Größen in einer Datei zu speichern.

Extraktionsmaschine

Da das Extrahieren der Icons aus ausführbaren Dateien zwei Arbeitsschritte benötigt und man danach meistens noch die nun überflüssigen .ico-Dateien loswerden will, lohnt sich ein Skript, das alle Arbeitsschritte zusammenfasst (Listing 1 zeigt als Beispiel eines mit Namen iconextract). Dieses legen Sie in einem Verzeichnis im Suchpfad ab. Der Aufruf erfolgt in der Form

iconextract tolle_icons.dll

Die extrahierten Bilder legt iconextract mit durchnummerierten Namen im aktuellen Arbeitsverzeichnis ab.

Eigentlich ist extresso für diese Aufgabe vorgesehen, allerdings gibt es bislang zu wenig vorgefertigte Resourcefiles, die für bekannte .dll und .exe-Dateien festlegen, was wohin extrahiert werden soll. Die vorhandenen (z. B. win98_pifmgr für pifmgr.dll von der Heft-CD) versehen die extrahierten Bilder mit aussagekräftigen Dateinamen. Kopieren Sie diese Ressourcen-Datei in das Verzeichnis, das auch pifmgr.dll enthält. Rufen Sie in diesem Arbeitsverzeichnis den Befehl

extresso win98_pifmgr --base=. --output=.

auf. Der erste Parameter nennt das zu verwendende Resourcefile; --base legt fest, wo extresso nach pifmgr.dll suchen soll (dem Punkt nach also im aktuellen Verzeichnis). Die extrahierten PNG-Dateien finden Sie, wie in win98_pifmgr angegeben, in einem neuen Unterverzeichnis namens ms unterhalb des Arbeitsverzeichnisses.

Gute Tat

Wenn Sie ein wenig Fleißarbeit nicht scheuen, können Sie anhand der Beispiele auf CD eigene Skripte erstellen und müssen sich nicht auf vorgefertigte Lösungen beschränken. Mit dem Aufruf

genresscript dateiname > script

erhalten Sie die Datei script. Die erste Zeile enthält den Namen der Binärdatei, danach folgt eine Liste aller Icon-Ressourcen, für die Sie noch die Namen eintragen müssen. Listing 2 zeigt ein solches Skript am Beispiel der Datei msimn.exe, mit dem Sie extresso wie oben beschrieben füttern.

Ein klassisches Henne-Ei-Problem: Um den Icons einer Datei aussagekräftige Namen geben zu können, müssen Sie sie erst einmal extrahieren. Haben Sie aber ein solches Skript erstellt, können Sie es danach auf jedem Rechner nutzen und auch Ihren Freunden zur Verfügung stellen.

Listing 1

iconextract

#!/bin/bash
# iconextract extrahiert mit wrestool, konvertiert
# mit icotool und löscht alle .ico-Dateien
# funktioniert nicht mit Datei- oder Pfadnamen,
# die Leerzeichen enthalten
/usr/local/bin/wrestool -x --output=. -t14 $1 &&
for i in @L: *.ico
        do /usr/local/bin/icotool -x --output=. $i
        done &&
rm -f @L: *.ico

Listing 2

Resourcefile für msimn.exe

file msimn.exe
resource group_icon, 2: email.png
resource group_icon, 3: pinboard.png
resource group_icon, 4: umschlag.png
resource group_icon, 5: brief.png

Weitere interessante Optionen bieten die Manpages von icotool und wrestool. So können Sie z. B. festlegen, dass nur Icons mit einer bestimmten Farbtiefe extrahiert werden sollen. Den meisten Spaß aber dürfte die Dekoration Ihres Desktops mit den neuen Motiven bereiten.

Glossar

Wrapper

Bei einem Wrapper ("Hülle", "Verpackung") handelt es sich um ein Programm oder auch Skript, das andere Programme aufruft. Oftmals setzt ein Wrapper die von jenem Programm benötigten Optionen oder fasst mehrere Arbeitsschritte zusammen.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

Kommentare