Mit Inkscape automatisiert Bilder bearbeiten

Analyse der SVG-Datei

Wie schon erwähnt, ist ein SVG nichts anderes als eine Textdatei. Schauen wir uns diese einmal im Texteditor unserer Wahl an und versuchen, die für uns interessanten Felder zu finden.

Da ja bei Bedarf das Hintergrundbild getauscht werden soll, suchen wir das als erstes. Dieses befindet sich auf der Ebene HINTERGRUND und ist beim Import in Inkscape nicht eingebettet, sondern verknüpft worden. Das ist wichtig, damit später beim Tausch des Hintergrundbildes ein anderes Bild referenziert werden kann:

Verknüpfung des Bildes in Inkscape während des Imports

Im XML-Code des SVG sieht das ganze dann so aus:

<g
     inkscape:label="HINTERGRUND"
     inkscape:groupmode="layer"
     id="layer1"
     transform="translate(349.75397,95.087318)"
     style="display:inline">
    <image
       sodipodi:absref="/home/nils/thd_logo_1400.jpg"
       y="-95.087318"
       x="-349.75397"
       id="image98"
       xlink:href="file:///home/nils/thd_logo_1400.jpg"
       preserveAspectRatio="none"
       height="493.88892"
       width="493.88892" />
  </g>

Man sieht die Ebene HINTERGRUND, auf der das Bild thd-logo_1400.jpg platziert ist. Um die Ausrichtung des Bildes muss man sich an dieser Stelle keine Gedanken machen. Ein zukünftig ausgetauschtes Bild wird dieselben Maße und Positionen einnehmen, wie hier angegeben. Weil das so ist, ist es allerdings ratsam, von vornherein Bilder zu verwenden, die denselben Maßstab wie das initiale Hintergrundbild haben.

Hier sehen wir also den Dateinamen, der zwimal vorkommt, und der bei Bedarf gegen einen anderen ausgetauscht werden kann. Natürlich sollte auch die Pfadangabe zu dem neuen Bild stimmen. Ich habe es bisher so gehalten, dass die zu tauschenden Bilder im selben Verzeichnis liegen, aber wenn es viele Bilder werden, ist es vielleicht hilfreich, sich mit einigen Unterordnern eine gewisse Struktur anzulegen.

Einer der nächsten interessanten Abschnitte in der Datei ist der der Banderolen-Texte. Diese sollen ja je einmal pro Song auf der jeweiligen Produkt-Auskopplung erscheinen. Also einmal soll dort Audio-MP3, dann PLAYALONG, dann Music-Sheet, dann Collection… zu lesen sein.

Da sich die Texte auf unteschiedlichen Ebenen befinden, müssen wir dafür sorgen, dass beim Export die jeweils gefragte Ebene eingeblendet ist. Im Script handhabe ich das so, dass zunächst alle Ebenen ausgeblendet sind und die jeweils gefragte eingeblendet wird. Ich exportiere also vier Mal – ein Export für jede Ebene.

  <g
     inkscape:groupmode="layer"
     id="layer2"
     inkscape:label="PLAYALONG"
     style="display:none">
    <text> ... </text>
  </g>

Der Übersicht halber habe ich den Codeschnippsel auf das Wesentliche reduziert. In der 5. Zeile steht style=“display:none“. Das bedeutet, dass diese Zeile momentan nicht sichtbar, also ausgeblendet ist. Um die jeweilige Ebene einzublenden, muss der Wert für die display-Eigenschaft auf inline gesetzt werden:

...
style="display:inline">
...

Damit wird die in Frage kommende Ebene und der darauf platzierte Text beim Export sichtbar sein. Dies spiele ich im Script für jede Ebene, auf der Banderolentext zu lesen ist, einmal durch, insgesamt also viermal.

Durch entsprechende Namensgebung der Banderolenebenen wäre es auch möglich, diesen Vorgang in einer einzigen Code-Schleife unterzubringen, aber wie eingangs schon erwähnt, stand hier Zeitaufwand für Logikausarbeitung gegenüber dem Aspekt, einfach mal zu Potte zu kommen in Verbindung mit der Aussicht, dass sich diese Texte absehbar sowieso nicht ändern werden. Also bisher viermal im Script abgearbeitet, in einer überarbeiteten Version vielleicht anders… 😉

Auf einer weiteren Ebene finden wir den Songtitel, der ja zweimal, einmal in weiß und einmal in schwarz, platziert ist:

  <g
     inkscape:groupmode="layer"
     id="layer10"
     inkscape:label="SONGTITEL"
     style="display:inline">
    <text ... >Count Blessings</tspan></text>
    <text ... >Count Blessings</tspan></text>
  </g>

Ich habe die umfangreichen Style-Angaben mal weggelassen, uns interessiert hier nur der in reiner Textform angegebene Songtitel, der bei Bedarf durch das Script angepasst werden kann, hier „Count Blessings“.

In derselben Weise, nur mit anderen Style-Angaben versehen taucht auf einer anderen Ebene der Bandname auf:

<g
     inkscape:groupmode="layer"
     id="layer3"
     inkscape:label="BANDNAME"
     style="display:inline">
    <text ... >THREE DEUCES</tspan></text>
    <text ... >THREE DEUCES</tspan></text>
  </g>

Auch dieser kann bei Bedarf durch einen anderen Bandnamen ersetzt werden.

Styleangaben in den Textfeldern

Über die Styleangaben in den Textfeldern lässt sich auch die verwendete Schriftart definieren. Da Layout-Gestaltung letzten Endes eine optische Angelegenheit ist, würde ich an dieser Stelle empfehlen, den Text für den Bandnamen und die Songtitel zunächst in Inkscape auszuprobieren. Jeder Font hat unterschiedliche Schrittweiten usw, und das Gesamtkonzept muss ja auch stimmen. Es sollte auch abgeschätzt werden, inwieweit Songtitel der Länge nach passen, oder ob unterschiedliche Schriftgrößen verwendet werden müssen und dergleichen. Sobald aber ein sinnvolles Layout gefunden ist, lässt sich durch die Automation doch eine Menge Arbeit sparen.

Die Vorlage ist gemacht, die Felder in der SVG-Datei sind lokalisiert, kommen wir nun zum Script und zum Prozess der Weiterverarbeitung.

Nächste Seite: Verarbeitung im Perl-Script