Cropping
.svg
files on the command line is simple:
$ inkscape --verb=FitCanvasToDrawing --verb=FileSave --verb=FileClose *.svg
I need to do the opposite. I want to fit the drawing into a
64 x 64
points canvas (already set in all.svg
files). Unfortunately Inkscape doesn’t provide aFitDrawingToCanvas
command.
Moreover, the fitting should keep the aspect ratio of the drawing.If it matters: I’m using Ubuntu raring.
Answer
I found a way to do this in this question: Inkscape – Center Drawing to Page via Command Line/Terminal
With “foo.svg” as the image to edit:
inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileQuit foo.svg
To edit all svg images in the current directory:
inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileClose *.svg
But this second command opens a ton of windows, which will make your computer crash if you’re editing too many images. For Linux only, this command will work better:
for img in $(ls *.svg) ; do inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileQuit $img ; done
For the above command, if any of the files are symlinks, Inkscape will edit the target file that the symlink points to. If you don’t want Inkscape to do this, you can filter out any symlinks with this command:
for img in $(ls *.svg) ; do if [[ $(readlink $img) == "" ]] ; then inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileQuit $img ; fi ; done
While I’m at it, I might as well post the bash script I made for this:
#!/bin/bash
# inkscape-center <file-or-directory>...
_analyse() {
if [ -d "${1}" ] ; then
_centerAll "${1}" ;
else
_center "${1}" ;
fi
}
_centerAll() {
cd "${1}" ;
for img in $(ls "*.svg") ; do
_filterSyms "${img}" ;
done
}
_filterSyms() {
if [[ $(readlink "${1}") == "" ]] ; then
_center "${1}"
fi
}
_center() {
inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileQuit "${1}"
}
for arg ; do
_analyse "${arg}" ;
done
I called it inkscape-center
and run it like this:
inkscape-center <file-or-directory>
It takes as many arguments as you want, so you can do something like this:
inkscape-center 1st.svg 2nd.svg 3rd.svg 4th.svg
Be careful– If you specify a directory instead of a file, it’ll edit every svg file in that directory.
Attribution
Source : Link , Question Author : Stefan Endrullis , Answer Author : Community