如何在命令行上将svg图纸适合其画布?


13

.svg在命令行上裁剪文件很简单: $ inkscape --verb=FitCanvasToDrawing --verb=FileSave --verb=FileClose *.svg

我需要做相反的事情。我想将绘图放入64 x 64点画布(已在所有.svg文件中设置)。不幸的是,Inkscape没有提供FitDrawingToCanvas命令。此外,配件应保持图纸的纵横比。

如果很重要:我正在使用Ubuntu raring。


1
在将画布安装到图纸上之后会重新调整尺寸吗?见graphicdesign.stackexchange.com/questions/6574/...
Takkat

两个问题:(1)每个实例中已经设置了画布大小,但是图纸大于画布;还是要将svg绘图插入到另一个svg文档中?(2)“保持长宽比”:鉴于您的问题中提到的64pt方形画布,这令人困惑,但是您是否针对如何处理非方形材料提出了自动决策流程?例如,在所有情况下,高度均应为64pt ...
horatio

@Takkat:谢谢你的提示。工作流程有效,但是长宽比被破坏了。将为此寻找解决方案...
Stefan Endrullis

@horatio:(1)绘图比画布小,是的,它们都在同一文件中。(2)我想将绘图缩放到max(drawingWidth,drawingHeight)= 64pt。
Stefan Endrullis 2013年

@Takkat:rsvg-convert有一个参数--keep-aspect-ratio :)
Stefan Endrullis

Answers:


2

我在以下问题中找到了解决此问题的方法:Inkscape-通过命令行/终端居中绘制到页面

使用“ foo.svg”作为要编辑的图像:

inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileQuit foo.svg

要编辑当前目录中的所有svg图像:

inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileClose *.svg

但是,第二个命令会打开大量的窗口,如果您编辑的图像过多,则会使计算机崩溃。对于Linux,此命令将更好地工作:

for img in $(ls *.svg) ; do inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileQuit $img ; done

对于上述命令,如果任何文件都是符号链接,则Inkscape将编辑符号链接指向的目标文件。如果您不希望Inkscape执行此操作,则可以使用以下命令过滤掉所有符号链接:

for img in $(ls *.svg) ; do if [[ $(readlink $img) == "" ]] ; then inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileQuit $img ; fi ; done


在进行此操作时,我不妨张贴为此编写的bash脚本:

#!/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

我调用它inkscape-center并像这样运行它:

inkscape-center <file-or-directory>

它接受任意数量的参数,因此您可以执行以下操作:

inkscape-center 1st.svg 2nd.svg 3rd.svg 4th.svg

注意 -如果指定目录而不是文件,它将编辑该目录中的每个svg文件。


1

您可以使用viewBox完成所需的操作。我不知道是否可以在Inkscape中执行此操作,但是由于SVG是标准格式,因此可能还有另一种工具可以完成您想要的工作。对于“SVG命令行工具”快速搜索发现了一些有趣的结果,其中包括这一个用于创建CSS图标。

第二种选择是用您选择的语言编写自己的工具来执行此操作。基本要点是将viewBox设置为文档的高度,然后设置所需的文档的宽度和高度。最后,设置preserveAspectRatio属性。

这是上面描述的修改在最初为744x1052的文档上的外观。

<svg
   width="64"
   height="64"
   viewBox="0 0 744 1052"
    preserveAspectRatio="xMinYMin slice"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.