SVG-Zeichnung in der Befehlszeile auf Leinwandgröße zuschneiden

SVG-Zeichnung in der Befehlszeile auf Leinwandgröße zuschneiden

Ich habe SVG-Bilder, die von PlantUML erstellt wurden und bei denen einige Teile der Zeichnung außerhalb der Leinwand liegen. Das erschwert die Verwendung solcher Bilder und ich muss die Zeichnung auf Leinwandgröße zuschneiden. Da ich UML-Diagramme sowieso mit Skripten erstelle, wäre es sehr effizient, auch dort ein Zuschneiden vorzunehmen.

Bisher habe ich zwei Dinge versucht: a) Größe der Leinwand mit Inkscape auf Zeichnung anpassen

inkscape --verb=FitCanvasToDrawing --verb=FileSave --verb=FileClose *.svg

Das funktioniert einwandfrei, aber ich muss die Zeichnung auf Leinwandgröße zuschneiden und dieser Vorgang scheint nicht verfügbar zu sein.

b) Größe ändern mit rsvg-convert

rsvg-convert image.svg -w 1870 -h 1195 -f svg -o image.svg

Dadurch wird das Bild exakt auf die gewünschte Größe zugeschnitten, aber die Bildgröße erhöht sich um das Zehnfache, da jetzt einige Binärbilder in SVG eingebettet sind. Das ist für mich nicht akzeptabel.

Antwort1

Ich habe mit Orions Vorschlag eine wenig elegante Möglichkeit gefunden, das zu tun. Angenommen, $svg_file_namees handelt sich um eine Variable, die den Dateipfad zu einem SVG-Bild enthält.

Zuerst benötigen wir Bildbreite und -höhe

width=$(exiftool -ImageWidth $svg_file_name | sed "s/.*: //;s/pt//g")
height=$(exiftool -ImageHeight $svg_file_name | sed "s/.*: //;s/pt//g")

PlantUML erzeugt das Diagramm als einzelne Gruppe (Tag <g>). Platzieren wir ein Rechteck in Leinwandgröße über dieser Gruppe

sed -i "s|</g>|</g><polygon fill=\"#FFFFFF\" points=\"0,0,0,$height,$width,$height,$width,0\" style=\"stroke: #000000; stroke-width: 1.0;\"/>|" $svg_file_name

Öffnen Sie nun das Bild mit Inkscape, wählen Sie alles aus und schneiden Sie die Gruppe mit dem Rechteck aus

inkscape --verb=EditSelectAll --verb=ObjectSetClipPath --verb=FileSave --verb=FileClose $svg_file_name

Mit der neuesten Version von Inkscape muss man Inkscape beenden, anstatt die Datei zu schließen

inkscape --verb=EditSelectAll --verb=ObjectSetClipPath --verb=FileSave --verb=FileQuit $svg_file_name

verwandte Informationen