Batch-Größenänderung von .svg-Dateien

Ich habe einen Ordner (original_svg_files) mit mehr als zehntausend .svg-Dateien in verschiedenen Größen und ich muss die Größe jeder einzelnen ändern. Der Name sollte mit der ursprünglichen .svg-Datei identisch sein und die längste Seite sollte 150 Pixel groß sein, und ich muss auch das Seitenverhältnis beibehalten (die Proportionen einschränken).

Ich habe versucht, Adobe Illustrator dazu zu verwenden, kann aber nicht herausfinden, wie, da es nur die Transformation über einen Prozentsatz unterstützt. Ich muss diesen Prozess über die Befehlszeile oder Automator automatisieren, da das, was ich jetzt tue, wirklich zeitaufwändig ist!

Ich verwende OS X El Capitan Version 10.11.1.

Irgendwelche Vorschläge?

Antworten (3)

Sieht so aus, als würde die Option -fit in diesem Befehlszeilendienstprogramm genau das tun, was Sie wollen:

https://github.com/vieron/svg-resizer

Wenn Sie Hilfe beim Brauen benötigen, schauen Sie hier: http://coolestguidesontheplanet.com/installing-homebrew-os-x-yosemite-10-10-package-manager-unix-apps/

Wenn Sie mit der Befehlszeile nicht vertraut sind, lassen Sie sich davon nicht einschüchtern - es ist wirklich nicht so schwer. Posten Sie zurück, wenn Sie nicht weiterkommen oder etwas einfach keinen Sinn ergibt.

Ich bin mir ziemlich sicher, dass Sie ImageMagick verwenden können, um das zu tun, was Sie brauchen. Es gibt ein Homebrew-Paket für Imagemagick (Homebrew ist das Mac-Äquivalent von apt-get). Also nach kurzer Zeit:

brew install imagemagick

Sie sollten in der Lage sein, die Befehlszeilenprogramme dafür zu verwenden. Sieht so aus, als ob der Konvertierungsbefehl die Größenänderung mit der gewünschten proportionalen Skalierung durchführen sollte.

convert oldimage.svg -resize "150>" oldimage.svg

Dieser Befehl besagt, dass das Bild so verkleinert werden soll, dass die längste Seite 150 ist. Der Rest besteht nur darin, Standard-Shell-Skripte zu verwenden, um den gewünschten Effekt zu erzielen.

Dies hat das SVG-Format für mich gebrochen. Es fügt xml- und doctype-Tags hinzu und das Bild wird in einem Webbrowser nicht mehr richtig angezeigt.
Dadurch wird das SVG gerastert

Keine Ahnung, ob dies auch für die Mac-Shell funktioniert, aber ich habe das folgende Bash-Skript basierend auf den Informationen im Inkscape-Forum geschrieben :

Grundsätzlich nimmt es alle SVG-Dateien und sucht nach den Viewbox-Attributen des SVG, fügt Breite und Höhe und einen Gruppenwrapper hinzu, um die Größe der ursprünglichen Elemente zu ändern/zu verkleinern.

#!/bin/bash

for folder in $(ls -d [A-Z]*);
do 
  echo "$folder";
  mkdir -p resized/$folder; 
  for svgfile in $(ls $folder/*); 
  do 
    echo "$svgfile"; 
    cat "$svgfile" | \
      sed 's/viewBox="0 0 161.9 162" enable-background="new 0 0 161.9 162" xml:space="preserve">/width="41px" height="41px" viewBox="0 0 41 41" enable-background="new 0 0 41 41" xml:space="preserve">\n<g transform="scale(0.25)">/g' | \
      sed 's/<\/svg>/<\/g>\n<\/svg>/g' \
      > resized/$svgfile;
  done;
done

YMMV, abhängig davon, ob Ihre SVG-Dateien alle dieselbe ursprüngliche Viewbox verwenden, meine hat es getan.

Warum $(ls $folder/*)(was bricht, wenn einige Dateinamen Leerzeichen enthalten) anstelle von $folder/*?