Gestalterische Freiheit: Die meisten Anbieter bieten eigene Software an. Selbst wenn diese für meine Anforderungen genügen würde, will ich doch auch für die Zukunft gerüstet sein und möglichst wenigen Beschränkungen unterliegen.
Professionalität: Ich will ein typografisch perfektes Ergebnis haben; und ich will auch die bestmögliche Bildqualität – beispielsweise rekomprimieren manche Fotobuch-Programme die Bilder, um den Upload zu beschleunigen, auf Kosten der Qualität.
Systemunabhängigkeit: Die meiste Software gibt es nur für Windows. Ich arbeite unter Linux. Aber selbst wenn das Programm auch unter Linux läuft, will ich nicht erst auf jedem Rechner eine Spezialsoftware installieren müssen.
Offene Standards: Mein mit viel Arbeit erstelltes Fotobuch soll nicht in einem proprietären Datenformat gespeichert sein. Zudem will ich volle Kontrolle über die Einstellungen haben.
Automatisierbarkeit: Ich will Zeit für Detailarbeit haben; darum soll das Grundgerüst der Datei automatisch aus einer Bilderliste erzeugt werden können.
Ein paar Anbieter bieten die Möglichkeit, das Fotobuch als PDF abzuliefern. Nur, mit welcher Software soll man es erzeugen? Beispiele:
LaTeX: Bietet volle Gestaltungsfreiheit, ist aber hakelig in Bezug auf die exakte Positionierung von Elementen.
SVG: Könnte das ideale Format sein, weil es exakte Positionierung erlaubt, die Elemente hierarchisch gruppiert werden können, und mit Inkscape existiert auch ein guter grafischer Editor. Allerdings kann man mit SVG kein Buch machen, nur Einzelseiten; zudem habe ich keine Möglichkeit gefunden, Elemente beispielsweise zu zentrieren (ähnlich wie in HTML) – mag sein, dass es das gibt.
Scribus: Ist ein DTP-Programm, hat ein gut dokumentiertes, XML-basiertes Dateiformat, und käme daher prinzipiell auch in Frage. Allerdings habe ich damit kaum Erfahrungen, und weiß auch, dass einige wichtige Features zur Textformatierung fehlen.
OpenOffice: Wäre gar kein so schlechter Kandidat (trotz gegenteiliger Vorurteile), allerdings ist das Dateiformat zu komplex, um es skriptgesteuert zu erzeugen.
Die genannten Maße gelten für den Anbieter ePubli, siehe dessen Spezifikationen.
Ich habe mich entschieden, das Fotobuch in LaTeX zu realisieren.
Gute Fotos brauchen viel Platz und ein schlichtes Umfeld, um zu wirken. Entsprechend will ich nur ein Foto pro Seite.
Weil ich sowohl Querformat- als auch Hochformat-Bilder habe, habe ich mich für ein quadratisches Seitenformat entschieden – so sind beide Bildformate gleich groß, und es bleibt ein Rand für etwas Text.
Der Seitenhintergrund ist schwarz, das hebt die Fotos heraus.
Weil die Seiten beidseitig bedruckt werden sollen, verwende ich die Dokumentklasse book.
Damit die Fotos zuverlässig bis an den Bildrand gedruckt werden, erstelle ich die Seiten nicht in
ihrer Netto-Seitengröße, sondern inklusive Beschnittrand, und lasse die Fotos etwas in den Beschnitt
hineinragen.
Allerdings ist das etwas hakelig in LaTeX umzusetzen. Ich habe die LaTeX-Seitengröße
auf den Anschnittrahmen gesetzt (= meist 3 mm größer als die Netto-Seitengröße; je
nach Hersteller an allen Rändern, oder nur an den Außenrändern) und via geometry-Paket
entsprechende Seitenränder definiert, die dem Beschnitt minus dem Überstand des Bildes entsprechen.
(Jener wird in der Variablen cropspace gespeichert.) Die Zentrierung wird dann mit entsprechenden
Abstandhaltern korrigiert.
Der Text steht bei Querformat-Bildern darunter horizontal zentriert; bei Hochformatbildern dagegen am Außenrand der Seite, vertikal zentriert (hier gilt die Annahme, das Bildformat sei 3:4). Die automatische Silbentrennung ist deaktiviert; das macht man besser per Hand.
Zum Einbinden der Bilder gibt es die Makros \landscapephoto und \portraitphoto.
Download: Quelltext, als PDF, Dummy-Querformatbild, Dummy-Hochformatbild
Wenn Einzelseiten doch ein anderes Layout haben sollen, dann kann man diese mit einem anderen Programm erstellen – beispielsweise Inkscape –, als PDF exportieren und dann mit Hilfe des Pakets pdfpages in das LaTeX-Dokument einbauen.
Die Umschlagseiten habe ich mit Inkscape gestaltet:
Man kann mit Hilfe des Programms pdftk eine PDF-Seite auf ein anderes PDF-Dokument stempeln, und somit den Beschnittrand sichtbar auf das Fotobuch stempeln. Dazu erstellt man zuerst einen geeigneten Stempel – ich habe dazu in Inkscape eine Seite mit der Brutto-Seitengröße des Fotobuchs erstellt, dann ein seitenfüllendes rotes halbtransparentes Rechteck eingefügt, und ein weiteres Rechteck mit der Netto-Seitengröße davon per Differenz-Operator abgezogen. Übrig bleibt der gewünschte Beschnittrand. Hier ist die Inkscape-Datei; und die daraus exportierten Stempel sind hier für linke Seiten und hier für rechte Seiten.
Das Draufstempeln funktioniert dann mit folgendem Skript; es ist etwas aufwändig, weil linke und rechte Seiten getrennt behandelt werden müssen, und dazu muss das PDF zuerst in Einzelseiten aufgespalten und die wieder zusammengesetzt werden:
#!/bin/bash TEMPDIR=`mktemp -d` PREVDIR="$PWD" pushd $TEMPDIR > "/dev/null" pdftk "$PREVDIR/$1" burst output "%04d.pdf" for i in +([0-9]).pdf; do if [ $(( 10#${i/.pdf/} % 2 )) -eq 0 ]; then STAMP="$PREVDIR/stamp_epubli_left.pdf" else STAMP="$PREVDIR/stamp_epubli_right.pdf" fi pdftk $i stamp $STAMP output out_$i done pdftk out_+([0-9]).pdf cat output "$PREVDIR/$2" popd > "/dev/null" rm -Rf $TEMPDIRAlternativer Weg: Mit dem Programm pdfjoin kann man auch PDF-Dateien beschneiden:
pdfjoin --trim "0mm 3mm 3mm 3mm" --outfile output.pdf input.pdf
Da auch hier linke und rechte Seiten unterschiedlich behandelt werden müssen, muss man ein ähnliches Skript wie oben verwenden, aber den pdftk-Aufruf durch pdfjoin ersetzen und statt der Variablen STAMP eine mit dem Beschnittrand-String definieren (die Reihenfolge der Zahlen bedeutet links, unten, rechts, oben).
Drittens hatte ich noch ein eigenes Skript zum Beschneiden gebastelt, bevor ich die vorigen beiden Wege entdeckt habe. Dieses fügt CropBox-Einträge in das PDF ein – weil das die xref-Tabelle nicht anpasst, kommt es zu Fehlermeldungen, aber in der Praxis funktioniert das PDF weiterhin.
#!/usr/bin/awk -f BEGIN { margin = 3; # crop margin in mm margin *= 360 / 127; # convert mm to DTP point (= unit used in Postscript) } { print; } /^\/MediaBox / { match( $0, "\\[ *([0-9.-]+) +([0-9.-]+) +([0-9.-]+) +([0-9.-]+) *\\]", a ); print "/CropBox [" (a[1] + margin) " " (a[2] + margin) " " (a[3] - margin) " " (a[4] - margin) "]"; }
Dazu verkleinert man das PDF, so dass zwei Seiten auf eine Seite passen. So sieht man, welche Bilder nebeneinander zu liegen kommen:
pdfnup --nup 2x1 --openright true --outfile output.pdf input.pdf
Digitalfotos verwenden den RGB-Farbraum; gedruckt wird jedoch meist mit dem CMYK-Farbmodell, welches nicht alle RGB-Farben darstellen kann. Entsprechend können besonders die reinen RGB-Grundfarben nicht korrekt wiedergegeben werden. Wie man die Farbwiedergabe mit freien Werkzeugen überprüfen kann, weiß ich nicht; ein allgemeingültiges Verfahren gibt es jedenfalls nicht, für die Konvertierung von einem Farbraum in einen anderen benötigt man die passenden Farbprofile.
Wenn man sein PDF-Fotobuch in CMYK konvertieren will, kann man das mit dem Programm ps2pdf mit der Option -dProcessColorModel=/DeviceCMYK tun. Anscheinend müssen außerdem auch die Bilder einzeln zu CMYK konvertiert werden, dies geht mit ImageMagick:
convert -profile /usr/share/color/icc/rgb.icc -profile /usr/share/color/icc/cmyk.icc input.jpg output.jpg
Die schwarzen Seitenränder heben zwar die Fotos hervor, allerdings entlarven sie auch schonungslos einen schiefen Horizont oder schräge Gebäude. Man sollte sich darauf gefasst machen, diverse Bilder nachbearbeiten zu müssen.
Mit GIMP geht das folgendermaßen:
Gitter anzeigen: View/Show Grid
Bild per Hand drehen, so dass waagerechte/senkrechte Linien mit dem Gitter übereinstimmen: Layer/Transform/Arbitrary Rotation
Bild so beschneiden, dass das ursprüngliche Seitenverhältnis erhalten bleibt: Rectangle Select/Fixed: Aspect Ratio
Mit einem Fotobuch sprengt man schnell das Größenlimit des Anbieters, wenn man die Bilder in voller Auflösung nimmt und viele Seiten hat. Weil der PDF-Overhead im Vergleich zu den eigentlichen Bilddaten vernachlässigbar ist, rekomprimiert man am besten die Bilder. Das geht beispielsweise mit jpegoptim:
jpegoptim --strip-all --max=90 *.jpg