SVG 1.1:什么是"用户单位"以及如何将用户单位转换为绝对单位(例如:毫米)?

Dav*_*tti 6 implementation svg

我正在实施SVG Tiny 1.1,我无法理解"用户单元"的概念.

SVG 1.1规范将没有指定单位的每个<length>定义为"用户单位",例如"mm","cm","pt"等.

在实现接口"SVGLength"时,我遇到了4个与长度值相关的属性; value,unityType,valueInSpecifiedUnit,valueAsString.最后3个属性对我来说足够清楚了.

  1. valueInSpecifiedUnit是单位类型unitType.
  2. valueAsString等于valueInSpecifiedUnit+ unitType的字符串值.例如:"10mm"

但是,属性被称为用户单位.所以我的问题是:

  1. 什么是"用户单位"?
  2. 如何从"用户单位"转换为"绝对单位",如毫米(mm)?

问候,

Spa*_*hut 7

规范:

用户单位

以用户单位表示的坐标值或长度表示当前用户坐标系中的坐标值或长度.因此,10个用户单元表示当前用户坐标系中10个单元的长度.

也:

如果最外面的svg元素上的'width'或'height'属性是用户单位(即,没有提供单位标识符),则假定该值等于相同数量的"px"单位

这意味着用户单位是最外层svg元素的width和height属性中指定的单位,如果未指定,则用户单位为像素.

阅读SVG中有关单位的部分.

  • 因此,"用户单元"在最外面的svg元素的width和heigth属性中定义.示例:<svg width ="20cm"heigth ="10cm">则用户单位为"cm".<svg width ="200px"heigth ="100px">则用户单位为"px".这是正确的吗 ? (4认同)
  • @DavidAndreoletti不,用户单位总是等于一个`px`.根据规范:"一个px单位被定义为等于一个用户单位." 其他单位相对于`px`的大小进行缩放,即`1mm`总是等于`3.543307px`并且等于'3.543307`. (2认同)
  • 给出的每毫米 3.543307px 的比率相当于 90dpi,这是 Inkscape 过去使用的,但我相信现在的通用标准是 96dpi 或 3.779527559。SVG 标准似乎避免将用户单位与物理单位联系起来,因此它在很大程度上取决于实现的分辨率 - 所以 OP 取决于您选择的 DPI。 (2认同)