【发布时间】:2012-05-23 23:49:23
【问题描述】:
我定义了一个宽度和高度为“297mm”和“210mm”的 SVG 元素,并且没有视图框。我这样做是因为我想在 A4 视口中工作,但我想以像素为单位创建元素。
在某些时候,我需要放大以像素为单位定义的对象,以使其适合 A4 页面的一部分。例如,我可能有一个 100 像素宽的对象,我想将其水平缩放到 30 毫米。
这可能吗?我想我需要第二个带有新坐标系的容器,但我找不到任何方法。
编辑
似乎我(或 SVG)误解了像素是什么。我意识到我可以将一条线的大小调整为 100%,然后使用 getBBox 获取它的像素大小以找到所需的缩放比例。我编写了这段代码并在 2 台客户端上运行,一台使用 1280x1024 显示器 (80dpi),另一台使用 1680x1050 LCD (90dpi):
function getDotsPerInch() {
var hgroup, vgroup, hdpi, vdpi;
hgroup = svgDocument.createElementNS(svgNS, "g");
vgroup = svgDocument.createElementNS(svgNS, "g");
svgRoot.appendChild(hgroup);
svgRoot.appendChild(vgroup);
drawLine(hgroup, 0, 100, "100%", 100, "#202020", 1, 1);
drawLine(vgroup, 100, 0, 100, "100%", "#202020", 1, 1);
hdpi = hgroup.getBBox().width * 25.4 / WIDTH;
vdpi = vgroup.getBBox().height * 25.4 / HEIGHT;
drawText(hgroup, "DPI, horizontal: " + hdpi.toFixed(2), 100, 100);
drawText(hgroup, "DPI, vertical: " + vdpi.toFixed(2), 100, 120);
}
IE9、FF、Opera 和 Chrome 都同意两台显示器在水平和垂直方向上都是 96 dpi(尽管 Opera 稍微不准确),而 Safari 在两者上都报告 0 dpi监视器。所以 svg 似乎只是将“像素”定义为“96dpi”。一些快速的谷歌搜索似乎证实了这一点,虽然我还没有找到任何确定的东西,而且大多数点击给出 90dpi,96dpi 作为 FF 变体。
【问题讨论】:
-
为什么有些人认为这需要关闭?
-
哇——这个问题已经有一年的历史了,提出了一个关于 SVG dpi 定义的重要观点,显然与 SVG 相关,并显示了一些研究工作。而且,尽管如此,有 5 个人刚刚决定将其作为离题关闭,并且有人刚刚投了反对票。有人愿意解释吗?
-
其中一个已经 16 岁,而且似乎没有一个对 SVG 感兴趣...
-
@EML 注意:这已经被讨论过in the Tavern on the Meta chatroom(通过接下来的两天页面查看我的 cmets)。我完全同意你的看法,并感谢你的挫败感,但请不要发表与年龄相关的言论,比如你最新评论中的言论。我认为您的问题没有被任何人否决:作为离题关闭的问题会收到自动投反对票,现在已被自动删除。
-
网络技术中的像素是“CSS 像素”,它使用 96 dpi 显示作为标准。请查看 CSS3 值:w3.org/TR/2013/CR-css3-values-20130730(忽略弃用警告 - 这部分仍然有效)
标签: svg