Ändern Sie in Inkscape gleichzeitig die Größe des Dokuments und seines Inhalts


25

Ich habe mich bemüht, etwas zu tun, das mir ziemlich einfach vorkommt:

Wie kann ich in Inkscape die Größe des Dokuments und seines Inhalts (dh der Zeichnungen) gleichzeitig ändern?

Ein bisschen Kontext: Ich möchte eine relativ große Anzahl von SVG-Dokumenten aus dem Noun-Projekt (normalerweise 100 x 100 Pixel große Dokumente) in der Größe ändern, ohne die Größe der tatsächlichen Zeichnungen explizit ändern zu müssen.

NB: Wenn es eine Kommandozeilenlösung gibt, kann ich auch damit arbeiten!


Ich bin mir nicht sicher, was Ihr Endziel ist, aber AFAIK, der Dokumentbereich ist etwas willkürlich, abgesehen vom Drucken, bei dem Sie die Option haben, nur den Dokumentbereich zu drucken. Sie können jedoch auch nur den Objektbereich ausdrucken, um Ihre Hürde zu umgehen.
DA01

@ DA01 Nun, ich denke, das Dokument ist ziemlich hilfreich, wenn Sie nach Bitmap exportieren (was ich tue).
Julien_C

Gibt es eine Möglichkeit, die Größe eines Objekts zu ändern, bei dem keine Ecken gezogen werden müssen, bei der Sie jedoch explizit eine Größe angeben würden? Das könnte das sein, wonach ich mich
sehne

1
Selbst dann ist es eine willkürliche Option. Sie können eine Containerbox genauso einfach zeichnen wie Ihre Exportzone. Tatsächlich bevorzuge ich es normalerweise so. Zum Ändern der Größe können Sie Ihre Objekte auswählen und dann entweder a) die Statusleiste oben verwenden und Ihre Größenänderungen eingeben oder b) zu OBJECT> TRANSFORM gehen und Werte in die Transformationspalette
eingeben

@ julien_c: Ich denke, der Punkt hier ist, dass die Objekte reine Vektorgrafiken sind und keine Größe an sich haben, bis Sie sie auf einem Rastergerät (oder einer Datei) ausgeben. Ihre Größe (Zoll, Pixel, Ellen) spielt praktisch keine Rolle.
Horatio

Antworten:


24

Sie haben nicht erwähnt, welches Betriebssystem Sie ausführen. Ich benutze Ubuntu und konnte librsvg2 erfolgreich verwenden.

Wenn Sie Zugriff auf Ubuntu haben, können Sie Folgendes tun. Installieren Sie zuerst librsvg2:

sudo apt-get install librsvg2-bin

cdWechseln Sie dann in das Verzeichnis, in dem Ihre SVGs gespeichert sind (stellen Sie sicher, dass nur SVGs vorhanden sind!), Und verwenden Sie einen Befehl wie den folgenden:

for old in *; do
    new="$(echo "$old" | sed -e 's/svg$/new.svg/')"
    rsvg-convert "$old" -w 160 -h 160 -f svg -o "$new"
done

Dadurch wird ein neuer Stapel von SVGs mit den Abmessungen 200 x 200 Pixel erstellt und als "original-file-name.new.svg" gespeichert.

Das Berechnen von Dimensionen ist etwas verwirrend. Um SVG in SVG zu konvertieren, müssen Sie ein bisschen rechnen. Die Optionen "height" und "width" in rsvg-convert verwenden in solchen Fällen pt, nicht px. Verwenden Sie also 80, wenn Sie 100px, 120, wenn Sie 150px usw. möchten.

Sie können auch rsvg-convert verwenden, um PNGs auszugeben. Zumindest meiner Erfahrung nach ist es viel besser, die Datei zu rastern als ImageMagick. Beachten Sie, dass Sie ändern müssen , -fum png, müssen Sie die Ausgabe speichern Muster ändern aus 's/svg$/new.svg/'zu 's/svg$/png/', und geben Sie die Breite und Höhe , dass Sie wie die Pixelwerte soll.

for old in *; do
    new="$(echo "$old" | sed -e 's/svg$/png/')"
    rsvg-convert "$old" -w 200 -h 200 -f png -o "$new"
done

Übrigens gehe ich nur davon aus, dass Sie dies im Batch-Modus für eine große Anzahl von SVGs tun müssen. Wenn nicht, können Sie immer noch die Datei rsvg-convertals solche verwenden: rsvg-convert noun_project_1576.svg -w 320 -h 160 -f svg -o noun_project_1576-skewed.svgDiese verwendet eine Quelldatei mit dem Namen "noun_project_1576" und neigt sie auf 400 x 200 Pixel und benennt sie in "noun_project_1576-skewed" um.
Ananda Mahto

@julien_c, habe gerade nachgehakt: Hast du diesen Vorschlag ausprobiert und damit Glück gehabt?
Ananda Mahto

Kopieren Sie den Code in dem Terminal eingefügt , sondern Rückkehr sed: -er Ausdruck # 1, char 14: unterminted 's' Befehl fehlt Argument für -o ... Irgendwelche Vorschläge
Raphie

Ich änderte "zu" und jetzt erhalte ich den Fehler beim Speichern in die Datei: echo svgfile.svg | sed -es / svg $ / 2.svg '
raphie

Großartig - es wird sogar noch besser sein, wenn librsvgder Fehler
Joce

7

Derzeit gibt es in Inkscape keine systemeigene Möglichkeit, dies zu tun. Die einzige Möglichkeit besteht darin, die Größe von Inhalten und Dokumenten separat zu ändern.


2

Es gibt zwar einige Möglichkeiten, dies zu tun - wie hier erwähnt - eine Möglichkeit, die wirklich gut funktionieren kann, ist die Verwendung von a viewBox. Sie ändern einfach den Inhalt des SVG-Tags wie folgt:

<svg
 width="1280"
 height="800"
 viewBox="0 0 1280 800">
    <!-- More markup... --!>
</svg>

Damit viewBoxwird ein internes Koordinatensystem für das Dokument definiert. Sie können das Dokument dann einfach skalieren, indem Sie die Attribute widthund heightnach Bedarf ändern.

Beachten Sie jedoch, dass es einige Nachteile gibt. Zum einen gibt es nur bestimmte Kontexte, in denen dies funktioniert, insbesondere, wenn Sie das SVG-Dokument direkt auf Ihrer Markup-Seite einfügen. Die Verwendung eines <img>Tags mit diesem kann zu unerwarteten Ergebnissen führen oder auch nicht. Sie müssen einige Ihrer eigenen Untersuchungen durchführen, um herauszufinden, wie dies am besten funktioniert.


2
Das funktioniert bei mir nicht und ich verstehe nicht warum. Wenn ich die Breite und Höhe bearbeite, aber die viewBox unverändert lasse: Wenn Chrome die Raw-SVG-Datei rendert, wird nur ein kleiner Teil des Inhalts angezeigt. Wenn Inkscape es rendert, wird der gesamte Inhalt angezeigt, aber es ist viel größer als die Seite. Dies ist derselbe kleine Teil (oben links), den Chrome angezeigt hat. Insgesamt also: Der Inhalt wird nicht anhand der Viewbox-Koordinaten skaliert. In meiner SVG sind mehrere untergeordnete SVG-Elemente enthalten, die jedoch alle basierend auf den Viewbox-Koordinaten transformiert werden (ich nehme an).
CPBL

Arbeitete für mich in Inkscape 0.92.3, Firefox 66 und Chrom 73.
Socowi
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.