在 Inkscape 中,同时调整文档及其内容的大小

平面设计 墨景
2022-01-06 02:40:34

我一直在努力做一些看起来很基本的事情:

在 Inkscape 中,如何同时调整文档及其内容(即绘图)的大小?

一点上下文:我想调整来自The Noun Project的大量 SVG 文档的大小(它们通常是 100x100px 文档),而不必显式地调整实际图纸的大小。

注意:如果有命令行解决方案,我也可以使用它!

4个回答

你还没有提到你正在运行什么操作系统。我正在使用 Ubuntu,并且已经能够成功使用 librsvg2。

如果您可以访问 Ubuntu,那么您可以执行以下操作。首先,安装 librsvg2:

sudo apt-get install librsvg2-bin

然后,cd到包含 SVG 的目录(确保它只有 SVG!)并使用如下命令:

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

这将创建一批尺寸为 200 像素 x 200 像素的新 SVG,并保存为“original-file-name.new.svg”

计算尺寸有点混乱。要将 SVG 转换为 SVG,您需要做一些数学运算。在这种情况下,rsvg-convert 中的“高度”和“宽度”选项使用 pt,而不是 px,因此如果需要 100 像素,请使用 80,如果需要 150 像素,请使用 120,依此类推。

您还可以使用 rsvg-convert 来输出 PNG。至少在我的经验中,它在光栅化文件方面比 ImageMagick 好得多。请注意,您需要更改-fpng,您需要将输出保存模式从 更改's/svg$/new.svg/''s/svg$/png/',并输入您想要的宽度和高度作为像素值。

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

目前在 Inkscape 中没有本地方法可以做到这一点。唯一的方法是分别调整内容和文档的大小。

虽然有几种方法可以做到这一点 - 如此所述- 一种非常有效的方法是使用viewBox. 您只需像这样修改 SVG 标记的内容:

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

viewBox它的作用是为文档定义一个内部坐标系然后,您只需根据需要修改widthheight属性即可轻松缩放文档。

请注意,虽然有一些缺点。一方面,它只适用于某些上下文,特别是如果您以某种方式直接在标记页面上包含 SVG 文档。使用<img>带有此标签的标签可能会也可能不会产生意外结果。你必须做一些自己的研究来弄清楚如何最好地做到这一点。

我一直在寻找一种方法来做到这一点,我习惯于使用记事本++来处理不完全相似的事情,但似乎是这样,使用正常的查找/替换我可以更改“文件中”或打开它们(如果不是数千)并找到你的高度和宽度,对我来说是 100 像素,但视图框有点烦人,因为来自 thenounproject 的图标具有不同的值,首先使用正则表达式对正常数字进行查找替换。

查找内容:viewBox=\"[\d ]*\" 替换viewBox="0 0 512 512"为(或任何您想要的数字)。

然后还有一些更烦人的有小数点的,比如 96.987 (tossers) 所以

查找内容:viewBox=\"[\d. ]*\" 替换为:viewBox="0 0 512 512"(或任何您想要的数字)

可能不是更改图像属性的传统方式,但 SVG 本质上是 XML 文件,正如我所知,搜索替换引号内的字符串大约需要 5 分钟,而在 notepad++ 中需要 5 分钟。希望它可能对某人有所帮助。

建议您在执行上述任何操作之前备份您的文件,因为如果您将其关闭(或者根本没有,如果您更改“文件中”),则没有简单的方法可以撤消。