Das ursprünglich für die automatische Bildaufbereitung von gescannten Bildern entwickelte ExactImage lässt sich auch im Alltag an verschiedenen Stellen nutzbringend einsetzen.
README
Wer in die Verlegenheit gerät, automatisch einen größeren Stapel von Bildern bearbeiten zu müssen, landet schnell bei der etwas unübersichtlichen Programmsuite ImageMagick. ExactImage bietet hier eine Alternative, indem es sich auf die wichtigsten Bildbearbeitungswerkzeuge beschränkt.
Wer Bilder automatisch im Stapelbetrieb bearbeitet, braucht schlanke, leicht zu bedienende Werkzeuge. Normalerweise dient dann Convert aus der ImageMagick-Suite [1] als Programm der Wahl. Allerdings gibt es auch einige Punkte, die gegen dieses Programm sprechen. Insbesondere glänzt Convert nicht unbedingt durch Stabilität. Meist spielt das keine ausschlaggebende Rolle, aber bei komplexen Befehlszeilen kann es schon einmal vorkommen, dass die Programmaufrufe mit einer (zumeist unverständlichen) Fehlermeldung abbrechen und ein falsches oder gar kein Ergebnis erzeugen.
Überhaupt erweist sich die Konstruktion der Befehlszeilen mit Convert als nicht zu unterschätzende Aufgabe: Das Programm kennt nicht weniger als 300 verschiedene Schalter, die oft eine etwas seltsame Syntax aufweisen. Auf jeden Fall dienen viele der Optionen sehr speziellen Aufgaben und fordern dem Anwender einige Übung und reichlich Wissen ab, um sie nutzen zu können – oder wüssten Sie aus der Hüfte, welches Ergebnis der Aufruf convert ... -resize 200\>x300^ ... erzeugt?
Weiterhin bemängeln viele Anwender die relativ geringe Effektivität der ImageMagick-Werkzeuge. Weder arbeiten die Programme besonders schnell, noch liefern sie besonders gute Ergebnisse. Das liegt zum Teil auch an der gewaltigen Funktionsvielfalt, die man oft gar nicht benötigt.
Die konkurrierende Suite GraphicsMagick [2] stellt einen Versuch dar, diesen Mängeln abzuhelfen, ein weiterer hört auf den Namen ExactImage [3]. Beide stellen nur ein Subset von ImageMagicks Repertoire bereit und beschränken sich dabei auf die wichtigsten Funktionen.
Worin unterscheiden sich die drei Konkurrenten nun im Einzelnen? Während ImageMagick mit knapp 20 verschiedenen Programmen daherkommt, beschränkt sich GraphicsMagick auf nur eines sowie drei Konfigurationsprogramme, ExactImage liefert immerhin noch sieben Werkzeuge (siehe Tabelle “ExactImage-Programme”).
Während GraphicsMagick versucht, den größten Teil von ImageMagicks Funktionen abzubilden, liefert die ExactImage-Minisuite lediglich ein universelles Werkzeug (Econvert als Pendant zu Convert) sowie einige Programme für sehr spezielle Aufgaben, wie etwa das Lesen von Barcodes und das Erkennen von leeren Seiten.
ExactImage-Programme
| Programm | Funktion |
|---|---|
bardecode |
liest Barcodes |
e2mtiff |
fasst mehrere Bilder zu einem mehrseitigen TIFF-Image zusammen |
econvert |
universeller Konverter, Gegenstück zu Convert aus der ImageMagick-Suite |
edentify |
identifiziert Bilddateien, Gegenstück zu Identify aus der ImageMagick-Suite |
empty-page |
erkennt Bilder leerer Seiten |
hocr2pdf |
erzeugt mittels hOCR-Dateien durchsuchbare PDFs |
optimize2bw |
optimiert Bilddateien für die Archivierung |
| Anmerkung: Zusätzlich gibt es noch Edisplay, eine heute nicht mehr wirklich unterstützte Variante des ImageMagick-Anzeigeprogramms Display. | |
Und: Action!
Ähnlich wie Convert bei den ImageMagick-Tools betätigt sich Econvert als Hauptakteur, wenn es um das Erzeugen neuer Bilder aus bestehenden geht. Die Syntax folgt dabei der folgenden Struktur:
$ econvert -i Eingabedatei -Option... -o Ausgabedatei<c>
Hier gilt es, unbedingt auf die korrekte Reihenfolge der einzelnen Bestandteile zu achten, ansonsten ignoriert Econvert (genau wie Convert) eventuell die angegebenen Optionen. Aus einer Eingabedatei können Sie mittels mehrerer Angaben von -Option -o Ausgabedatei beliebig viele Ausgabedateien in einer Befehlszeile erzeugen.
Die Arbeit der ExactImage-Tools wird, wie auch bei ImageMagick, vollständig durch die Optionen gesteuert (siehe Tabelle “Wichtige Optionen”). Dabei unterstützt ExactImage nur eine Teilmenge der vorhandenen Bildformate, die sich zudem bei den Ein- und Ausgaben unterscheidet (siehe Tabelle “Unterstützte Bildformate”). Die wichtigsten Bildformate unterstützt ExactImage dabei aber weitgehend.
Wichtige Optionen
| Option | Funktionen |
|---|---|
--compress Methode |
Kompressionsmethode für Ausgaben, etwa G3, G4, ZIP, … |
--quality Prozent |
definiert die Qualität in Prozent, voreingestellt: 75 |
--resolution xdpi [ydpi] |
Auflösung in X- und Y-Richtung |
--size BreitexHöhe |
definiert die Breite und Höhe der Ausgabedatei für Rohdatenformate |
--scale Faktor |
skaliert um den angegebenen Faktor |
--crop x y w h |
beschneidet das Bild auf den angegebenen Bereich |
--fast-auto-crop |
automatisches Beschneiden (vom unteren Rand her) |
--flip |
spiegelt vertikal |
--flop |
spiegelt horizontal |
--rotate Winkel |
dreht das Bild um den angegebenen Winkel |
--brightness Wert |
Helligkeit anpassen (-1 bis +1) |
--contrast Wert |
Kontrast anpassen (-1 bis +1) |
--saturation Wert |
Sättigung anpassen (-1 bis +1) |
--lightness Wert |
Leuchtstärke anpassen (-1 bis +1) |
--hue Wert |
Farbton anpassen (-360 bis +360) |
--negate |
ein Negativ erzeugen |
--gamma Wert |
das Gamma einstellen |
--normalize |
“normalisiert” die Farben im Bild |
--colorspace Modell |
konvertiert Bilder in eines der Farbmodelle BW, BILEVEL, GRAY, GRAY1, GRAY2, GRAY4, RGB, YUV oder CYMK |
--floyd-steinberg Wert |
erzeugt Schattierungen nach Floyd-Steinberg |
--riemersma Wert |
erzeugt Schattierungen gemäß Riemersma |
--blur Wert |
Gaußscher Weichzeichner |
--edge |
Kanten finden |
--foreground Farbe |
Zeichenfarbe setzen |
--background Farbe |
Hintergrundfarbe setzen |
--font Font |
Font einstellen |
--text x1 y1 Größe Text |
den Text an der angegebenen Position in der spezifizierten Größe ausgeben |
--text-rotation Winkel |
rotiert Texte |
--stroke-width Dicke |
Dicke für Linien |
--line x1 y1 x2 y2 |
Linie zwischen den angegebenen Punkten zeichnen |
Unterstützte Bildformate
| Kürzel | Bildformat |
|---|---|
BMP |
Windows primitives Bitmap-Format |
Digital Camera RAW |
von DCRAW unterstützte Rohdatenformate |
Encapsulated PostScript |
einseitiges PostScript |
GIF |
das veraltete Bitmap-Format |
JPEG |
klassisches JPEG |
JPEG2000 |
die neue JPEG-Variante |
OpenEXR |
HDR-Bitmap-Format, mit bis zu 32Bit Float pro Kanal |
PBM |
Portables Bitmap-Format |
PCX |
Picture Exchange, verbreitetes Austauschformat |
PDF |
write-only, mit eingebetteten JPEG und JPEG2000 sowie Fonts |
PNG |
Standard-Bitmap-Format |
PostScript |
write-only, mit eingebetteten JPEG |
RAW |
rohe Bilddateien |
SVG |
skalierbare Vektorgrafiken, read-only |
Targa, TGA |
Truevision Advanced Raster Graphics Array, bis zu 32 Bit pro Kanal |
TIFF |
der klassische Standard |
XPM |
X Windows Bitmaps (hauptsächlich für Icons) |
Beim Skalieren mittels --scale entscheidet der Algorithmus automatisch, welches Verfahren zum Einsatz kommt. Stellen Sie die dadurch gelieferten Ergebnisse nicht zufrieden, können Sie das Verfahren selbst festlegen. Dann heißen die Optionen entsprechend --bicubic-scale, --bilinear-scale, --box-scale, --ddt-scale oder --nearest-scale. Für das Erzeugen von Thumbnails gibt es mit --thumbnail einen besonders schnellen Filter.
Das Beispiel in Listing 1 verdeutlicht noch einmal die Verwendung von Econvert. Es erzeugt aus einer Eingabedatei drei unterschiedlich helle Ausgabedateien.
$ econvert -i 'tst.jpg' --brightness .5 -o tst1.jpg --brightness 1.5 -o tst2.jpg --brightness 5.5 -o tst3.jpg
Wer bist Du denn?
Das zweite wichtige Programm aus der ExactImage Suite ist Edentify, das dazu dient, das Format von Bildern zu identifizieren. Das Beispiel aus Listing 2 ist bewusst schwer gewählt: Beim Identifizieren von Rohdatenformaten handelt es sich um eine ohnehin schon anspruchsvolle Aufgabe, die sich bei dem durch Konvertierung erzeugten DNG nochmals erhöht. Wie im Vergleich dazu ImageMagick dieses Aufgabe mittels Identify bewältigt, zeigt Listing 3.
$ edentify _1140131.dng TIFFReadDirectory: Warning, Unknown field with tag 34858 (0x882a) encountered. TIFFReadDirectory: Warning, Unknown field with tag 50936 (0xc6f8) encountered. TIFFReadDirectory: Warning, Unknown field with tag 50941 (0xc6fd) encountered. TIFFReadDirectory: Warning, Unknown field with tag 50972 (0xc71c) encountered. _1140131.dng: TIFF 256x192 24 bits, 3 channels $ edentify _7098855.ORF Not a TIFF file, bad version number 20306 (0x4f52). _7098855.ORF: DCRAW 3720x2800 48 bits, 3 channels
$ identify _1140131.dng _1140131.dng=>magick-28490XIzHW1VpYbaB.png DNG 4608x3464 4608x3464+0+0 16-bit sRGB 80.88MB 0.000u 0:00.000 $ identify _7098855.ORF _7098855.ORF=>magick-28748rXhecIGQEDLK.png ORF 3729x2807 3729x2807+0+0 16-bit sRGB 43.04MB 0.000u 0:00.000
Während Edentify halbwegs korrekte Angaben liefert und sich gar nicht erst an den Dateigrößen versucht, aber gleichzeitig auch reichliche Fehlermeldungen ausgibt, geht ImageMagicks Identify hier anders vor: Zunächst konvertiert es die Rohdaten in ein Bitmap-Format, das es dann anschließend analysiert.
Ob diese Variante tatsächlich Sinn ergibt, darf man getrost bezweifeln. So zeigt sich, dass die von Identify angegebenen Dateigrößen völlig danebenliegen, da sie sich auf die durch die Konvertierung erzeugten Bitmap-Dateien beziehen anstatt auf die Originale. Die Bewertung von DNG als TIFF kann man als halbwegs korrekt gelten lassen, da DNG als Erweiterung des TIFF-Standards konzipiert wurde.
Interessant ist die Möglichkeit, mittels Edentify gezielt bestimmte Informationen über Bilder anzuzeigen. Dies gelingt durch die Angabe eines “Formatstrings” als Argument der Option -f. So zeigt -f "%f" den Dateinamen, -f "%w" die Breite und so weiter. Die Tabelle “Formatstrings” fasst die wichtigsten Varianten zusammen. Um mehrere Zeichenketten zu verbinden, können Sie \t (“Tabulator”), \n (“Newline”) oder \r (“Carriage Return”) verwenden.
Insgesamt bietet Edentify allerdings nur begrenzte Möglichkeiten, sodass Sie hier bei Bedarf doch wieder auf ImageMagicks Identify zurückgreifen müssen.
Formatstrings
| Kürzel | Bedeutung |
|---|---|
%d |
Directory |
%f |
voller Dateiname |
%t |
Dateiname ohne Erweiterung |
%i |
Pfad |
%w |
Breite |
%h |
Höhe |
%q |
Farbtiefe pro Kanal |
%x |
X-Auflösung |
%y |
Y-Auflösung |
%z |
Bildtiefe |
Hilfsprogramme
Die anderen Programme aus der ExactImage-Suite sind speziellerer Natur. So wertet Bardecode gescannte Barcodes automatisch aus, was auch bei relativ schlechten Bildern noch gelingt. E2mtiff fasst mehrere Bilder zu einer mehrseitigen TIFF-Datei zusammen:
$ e2mtiff x1.jpg x2.png ... -o out.tiff
Mehrseitige TIFFs sind unter Linux weder besonders verbreitet noch sonderlich beliebt. Allerdings kann Gimp sie durchaus öffnen und auch bearbeiten. Abbildung 1 zeigt, wie sich ein mehrseitiges TIFF in Gimp beim Laden bemerkbar macht. Sie können nun die als Ebenen vorliegenden Seiten einzeln bearbeiten (Abbildung 2) oder – durch das Ziehen mit der Maus auf den Werkzeugkasten – in neue Bilder umwandeln.
Optimize2bw bereitet gescannte Seiten so auf, dass sie sich optimal für das anschließende Bearbeiten mittels OCR eignen. Dabei erkennt Empty-page leere Seiten, sodass diese sich vorab aussortieren lassen.
Bei Hocr2pdf schließlich handelt es sich um das vermutlich am meisten verwendete Tool aus der ExactImage-Programmsuite.
Durchsuchbare PDFs
Mit Hocr2pdf erzeugen Sie bei Bedarf durchsuchbare PDFs aus gescannten Vorlagen. Diese PDFs bestehen im Prinzip aus zwei Ebenen: Eine nimmt die gescannte Grafik auf, eine zweite – oft unsichtbar darunterliegende – den aus der OCR-Bearbeitung resultierenden Text. In dieser zweiten Ebene erfolgt die Suche, sie sollte daher möglichst gut mit der grafischen Ebene übereinstimmen.
Eine ganze Reihe von Programmen nutzen Hocr2pdf, um solche “Sandwich”-PDFs zu erzeugen. Dazu zählen beispielsweise Pdfocr, das weitestgehend automatisch arbeitende Pdfsandwich [4], Xsane2sandwich [5] sowie Djvu2pdf [6], das aus Djvu-Daten eine hOCR-Datei extrahiert und ein durchsuchbares PDF erzeugt. Wie gut das klappt, zeigt Abbildung 3, in der die blauen Kästchen die erkannten Worte markieren.
Die Anwendung von Hocr2pdf gestaltet sich relativ einfach, wobei es die hOCR-Daten über den Standardeingabekanal erwartet (Listing 4, erste Zeile). Die hOCR-Dateien erzeugen Sie wahlweise mit Cuneiform oder auch mit Tesseract und bearbeiten sie gegebenenfalls mit den hOCR-Tools [7] nach. Falls die Ausrichtung des Texts nicht zum gescannten Bild passt, kann Hocr2pdf dies mit der Option -s (--sloppy-text) anpassen (Listing 4, zweite Zeile).
$ hocr2pdf -i scan.tiff -o out.pdf < Text.hocr $ hocr2pdf -i scan.tiff -s -o out.pdf < Text.hocr
Hocr2pdf kennt ansonsten nur noch wenige weitere Optionen, alles andere erfolgt automatisch. Der Schalter -i definiert die grafische Eingabedatei, -o die fertige Ausgabedatei. Durch -n lässt sich das Einbinden der grafischen Ebene verhindern, mit -r die Auflösung dafür einstellen. Als Vorgabe nutzt Hocr2pdf hier 300 dpi.
Fazit
Für komplexere Umwandlungen – also beispielsweise, um ein PDF in Einzelbilder aufzusplitten oder für den Vergleich zwischen zwei Bildern – müssen Sie immer noch auf ImageMagick oder GraphicsMagick zurückgreifen: Hier hilft ExactImage nicht weiter. Das gilt auch bei der Identifikation spezieller Bildformate, wo Edentify zwar Ergebnisse liefert, diese sich aber qualitativ nicht mit denen von Identify messen können.
Geht es aber um das oft benötigte Umwandeln und Bearbeiten gängiger Formate, bietet ExactImage in vielen Fällen eine schnell, einfach zu bedienende Alternative zu den komplizierteren Tools. Als wahres Kleinod erweist sich Hocr2pdf, das viele andere Werkzeuge implizit nutzen.
Infos
[1] ImageMagick: http://imagemagick.org
[2] GraphicsMagick: http://www.graphicsmagick.org/
[3] ExactImage: http://www.exactcode.de/site/open_source/exactimage/
[4] Pdfsandwich: http://www.tobias-elze.de/pdfsandwich/
[5] Xsane2sandwich: http://wiki.ubuntuusers.de/xsane2sandwich
[6] Djvu2pdf: http://0x2a.at/s/projects/djvu2pdf
[7] hOCR-Tools: https://github.com/tmbdev/hocr-tools








