这是 TL;DR 版本:
要从 foo.gv 中的图形生成 900 x 1500 像素的 PNG 图像,您可以运行:
dot -Tpng -Gsize=9,15\! -Gdpi=100 -ofoo.png foo.gv
生成正好 900 像素宽或 1500 高的图像,但不一定两者兼而有之;进而:
convert foo.png -gravity center -background white -extent 900x1500 final.png
用空白填充图像,使其正好是900 x 1500 像素;ImageMagick套件convert
的一部分在哪里。
以下是详细解释:
澄清:
该bb
属性被标记为“只写”,因此任何 Graphviz 布局引擎都不会尊重您在处理之前提交的任何值。
在一般情况下,Graphviz 可以生成矢量(可缩放)和位图图形,因此 DPI 并不总是一个有意义的指标。
特别是,该dpi
属性仅对位图和 SVG 输出格式有效。
你要做的有点复杂,因为 Graphviz 生成的图像的像素大小是由几个交互属性驱动的。
让我们以任意图为例。
该命令gvgen -dh3
将生成一个三阶有向超立方体。(如果您想了解更多详细信息,gvgen 手册页的 PDF 版本在这里,但没关系,它只是用于演示目的的任意图表。)
可以通过运行以下命令来创建该图的默认点生成 PNG 渲染:
gvgen -dh3 | dot -Tpng -oexample.png
当我这样做时,我得到一个 275 x 347 像素的 PNG 格式(位图)图像。(据报道file example.png
。)
该size
属性允许您为输出图像推荐最大或所需的高度和宽度(以英寸为单位)。即,该属性告诉 Graphviz最多size=3,5
生成 3 x 5 英寸的图像。如果图像开始时小于 3 x 5,Graphviz 将不理会它。如果图像开始时大于 3 英寸 x 5 英寸,Graphviz 会将其缩小,直到它适合 3 x 5 英寸的画布(保留原始图像的纵横比)。
添加感叹号会将size
属性从最大大小更改为所需大小。现在,如果两个尺寸都小于指定尺寸,则绘图将按比例放大,直到至少一个尺寸等于指定尺寸。
例如,运行:
gvgen -dh3 | dot -Tpng -Gsize=3,5\! -oexample.png
(请注意,它会\!
转义 bash 的感叹号。在 DOT 文件中,您只需编写size=3,5!
.)
生成一个 288 x 363 像素的图像,在两个维度上都比默认值略大。
dot 是如何得出这些数字的?好吧,Graphviz 的默认 DPI 值是每英寸 96 像素。在该分辨率下,3 x 5英寸的图像是 288 x 480像素的图像。布局引擎只是简单地按比例放大图像,直到至少有一个尺寸与所需尺寸匹配。
dpi
您可以使用属性覆盖默认 DPI 值,如下所示:
gvgen -dh3 | dot -Tpng -Gsize=3,5\! -Gdpi=200 -oexample.png
现在生成的图像尺寸为 600 x 757 像素。同样,Graphviz 只是将图像放大,直到其中一个尺寸与所需尺寸匹配(但在此分辨率下,3 x 5 英寸的图像是 600 x 1000 像素的图像)。
因此,如果要生成包含任意数量像素的图像,则需要同时size
进行dpi
适当的设置。
即,假设您要创建一个 900 x 1500 像素的图像。你可以使用:
gvgen -dh3 | dot -Tpng -Gsize=9,15\! -Gdpi=100 -oexample.png
或者
gvgen -dh3 | dot -Tpng -Gsize=3,5\! -Gdpi=300 -oexample.png
甚至:
gvgen -dh3 | dot -Tpng -Gsize=900,1500\! -Gdpi=1 -oexample.png
(虽然最后一个似乎在快速测试中对我有用,但我建议坚持使用更传统的 DPI 值以防万一。)
这解决了您的大部分问题,但请注意 Graphviz 仅缩放图像,直到其中一个尺寸与指定尺寸匹配。根据原始图像的纵横比,您可能会或可能不会获得您正在寻找的确切尺寸。
这就是ratio
属性发挥作用的地方。
命令:
gvgen -dh3 | dot -Tpng -Gsize=3,5\! -Gdpi=300 -Gratio=fill -oexample.png
应该给你一个你正在寻找的精确尺寸的图像,但有几个警告:
ratio
也接受一些不同的值。请参阅文档和/或进行一些实验以了解它们的作用。
对于它的价值,如果你真的想要你要求的精确像素尺寸的图像,我的建议是让 Graphviz 缩放图像,使两个尺寸之一匹配,然后使用ImageMagick之类的东西来填充图像获得您正在寻找的精确纵横比。例如,命令:
convert in.png -gravity center -background white -extent 900x1500 out.png
将在 900 x 1500 像素的画布上居中图像(从in.png
)(将其保存到out.png
),方法是根据需要填充水平或垂直尺寸