Ich habe einige Bilder, die ich in Inkscape mit .svg
Erweiterung erstellt habe. Diese Bilder haben verschiedene Pixelgrößen (256*265, 512*512 usw.).
Wie kann ich die Größe all dieser Bilder auf einmal in Linux ändern?
Ich habe die Lösung für mein Problem gefunden, der Weg dazu ist die Verwendung vonrsvg-converter
und nach der Suche in 3W habe ich dieses Skript hier gefunden
Alles, was Sie brauchen, ist, dieses Skript ausführbar zu machen und es auszuführen, gefolgt von einer neuen Größe für Ihre .svg
Datei(en).
Ohne zu wissen, warum Sie dies tun möchten, ist meine erste Reaktion , tun Sie es nicht .
Die Größe einer SVG-Datei ist wirklich ein Vorschlag – sie sind so konzipiert, dass sie in der Größe vergrößert und verkleinert werden können (daher skalierbare Vektorgrafiken). Die Höhe und Breite einer SVG-Datei spielt für die meisten praktischen Anwendungen keine Rolle. Wenn Sie möchten, dass das Bild (zum Beispiel) auf einer Webseite größer wird, können Sie einfach die Höhen- und Breitenattribute festlegen. Wenn Sie in eine PNG-Datei exportieren, können Sie die Abmessungen beliebig festlegen. Die Attribute height
und width
müssen tatsächlich nicht einmal vorhanden sein. Wenn für das Root-Element keine Höhe oder Breite angegeben ist <svg>
, wird es standardmäßig auf 100 % gesetzt.
Das Herumspielen mit Höhe und Breite verpasst wirklich einen der großen Vorteile von SVG-Dateien, nämlich die Skalierbarkeit.
Es kann Fälle geben, in denen Sie die Höhe und Breite einer SVG-Datei wirklich festlegen müssen, aber meiner Meinung nach liegt dies normalerweise an einer Einschränkung Ihres Arbeitsablaufs oder Ihrer Tools.
SVG-Dateien sind nur XML-Dateien – Sie können eine in einem Texteditor öffnen und einen Blick darauf werfen. Sie können sie wie jede andere XML-Datei bearbeiten. Mozilla Dev Network hat eine fantastische Referenz , um mehr über die XML-Seite von SVG-Dateien zu erfahren.
Um eine XML-Datei zu manipulieren, ist die herkömmliche Methode die Verwendung von XSL, einer Stylesheet-Sprache zum Transformieren einer XML-Datei in etwas anderes (normalerweise eine andere XML-Datei).
Erstellen Sie eine Textdatei mit dem Namen scale-svg.xsl und fügen Sie den folgenden Inhalt ein:
<xsl:stylesheet version="1.0">
<xsl:output method="xml"/>
<xsl:template match="svg:svg">
<xsl:copy>
<xsl:copy-of select="svg:metadata|svg:defs|sodipodi:namedview"/>
<xsl:element name="svg:g">
<xsl:attribute name="transform">
<xsl:value-of select="concat(concat('scale(',$scale),')')"/>
</xsl:attribute>
<xsl:copy-of select="*[not(svg:metadata|svg:defs|sodipodi:namedview)]"/>
</xsl:element>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Jetzt müssen Sie das Stylesheet auf eine SVG-Datei (oder Dateien) anwenden. Es sind viele XSLT-Programme verfügbar. Wenn Sie Linux verwenden, xlstproc
ist es wahrscheinlich bereits installiert.
# This command will scale small.svg up by 3x
$ xsltproc --stringparam scale 3 scale-svg.xsl small.svg>big.svg
# This command will scale all SVG files in the current directory
$ for f in *.svg; do xsltproc --stringparam scale 3 scale-svg.xsl $f>3x_$f; done
Wenn Sie etwas anderes tun möchten (z. B. die Höhe und Breite des SVG-Dokuments ändern, anstatt es zu skalieren), müssen Sie die XSL-Datei an Ihre Anforderungen anpassen. Es gibt viele Tutorials zu XSL, wie zum Beispiel dieses bei W3Schools .
Es gibt auch andere Ansätze, die Sie verfolgen. Eine schnelle Google-Suche fand auch svg-resizer , ein JavaScript-basierter Ansatz mit rsvg. Sie können ImageMagick wahrscheinlich auch dazu bringen.
Obwohl Inkscape über Batch-Verarbeitungsfähigkeiten verfügt, glaube ich nicht, dass es dies tun kann (auch hier sind die Abmessungen einer SVG-Datei Vorschläge, daher ist die Nützlichkeit begrenzt).
Inkscape kann den Export von SVG-Dateien in verschiedenen Größen automatisieren. Die Inkscape-Befehlszeilenoptionen haben die Möglichkeit, die Höhe und Breite beim Exportieren einer PNG-Datei manuell festzulegen.
scale-svg.xsl:1: namespace error : Namespace prefix xsl on stylesheet is not defined
Joonas
Whiskyhäuptling