【发布时间】:2017-01-07 18:33:08
【问题描述】:
我尝试自动生成一个 SVG 文件,旨在以特定尺寸 (A4) 打印。我希望在其中使用一条路径,它只允许“用户单位”,而不是“绝对单位”。
在我看来,不可能“发布”具有绝对单位(例如文档大小)和路径任何地方的 SVG 文件,因为我无法让它在查看器中正常工作。
有没有办法让渲染保持一致,比如指定“默认 DPI”?
或者换一种说法:我可以让下面的示例在不放弃绝对单位的情况下在所有查看器中呈现相同的内容吗?
相关:有没有办法强制以下任何应用程序以与其他应用程序相同的方式呈现图像? (例如,我尝试了“转换”的 -density 选项,但我无法使输出与 Inkscape 或 Firefox 的输出相匹配。)
例子:
我创建了一个 SVG 文件,其中包含三个黑色正方形(矩形)和一个红色对角线(路径):
- 左:用户单位的正方形和对角线
- 中间:正方形和对角线英寸(在我看来是最合乎逻辑的选择,但不允许)
- 右:正方形以毫米为单位,对角线以用户单位为单位
在不同的查看器中呈现不同的效果:
- Inkscape:90 DPI,所有正方形大小相同,红色对角线匹配
- Firefox:96 DPI?,后正方形变大(或对角变短)
- 转换:72 DPI,后面的正方形变小(或对角线变长)
Code:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
version="1.1"
width="200mm"
height="100mm"
>
<g transform="translate(50,50)">
<rect
width="100."
height="100."
x="10"
y="10" />
<path style="stroke: #ff0000" d="M 10 10 L 110 110" />
</g>
<g transform="translate(200,50)">
<rect
width="1.111in"
height="1.111in"
x="0.1111in"
y="0.1111in" />
<path style="stroke: #ff0000" d="M 0.1111in 0.1111in L 1.111in 1.111in" />
</g>
<g transform="translate(350,50)">
<rect
width="1.111in"
height="1.111in"
x="0.1111in"
y="0.1111in" />
<path style="stroke: #ff0000" d="M 10 10 L 110 110" />
</g>
</svg>
Inkscape(我的默认“查看器”):
火狐(注意红线没有到达右下角。我做了截图并随意裁剪):
ImageMagick(转换,除了给出文件名外没有其他选项):
【问题讨论】:
-
我发现stackoverflow.com/questions/1132269/… 有助于解释问题。
-
Inkscape 0.92:默认分辨率从 90dpi 更改为 96dpi,以匹配 CSS 标准。
标签: svg