如何在命令行上将 svg 绘图适合他们的画布?

平面设计 墨景 svg 批量处理 调整大小
2022-01-25 23:28:30

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

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

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

2个回答

我在这个问题中找到了一种方法:Inkscape - Center Drawing to Page via Command Line/Terminal

使用“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 文件。

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

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

以下是上述修改在最初为 744x1052 的文档上的样子。

<svg
   width="64"
   height="64"
   viewBox="0 0 744 1052"
    preserveAspectRatio="xMinYMin slice"