Contact me: hankecnc@gmail.com

视图框错误 #223

推推 grbl 3年前 (2023-02-03) 181次浏览
关闭
tbfleming 打开了这个问题 2017 年 3 月 19 日 · 15条评论
关闭

视图框错误#223

tbfleming 打开了这个问题 2017 年 3 月 19 日 · 15条评论

评论

视图框错误 #223
成员

Corel 文件触发 viewBox 处理中的错误。我将其追溯到 lw.svg-parser 和 LW4 代码处理单元的方式上的差异。

回购案例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<!-- Creator: CorelDRAW X7 -->
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="457.285mm" height="135.043mm" version="1.0" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" image-rendering="optimizeQuality" fill-rule="evenodd" clip-rule="evenodd"
viewBox="0 0 38014 11224"
 xmlns:xlink="http://www.w3.org/1999/xlink">
 <g id="Layer1">
  <metadata id="CorelCorpID_0Corel-Layer"/>
  <polygon fill="none" stroke="yellow" stroke-width="6.33459" points="3,3 38011,3 38011,11221 3,11221 "/>
 </g>
</svg>

lw.svg-parser 单位问题:skarab42/lw.svg-parser#8

视图框错误 #223 tbfleming 添加了 漏洞 标签 2017 年 3 月 20 日
视图框错误 #223

奇怪的…

视图框错误 #223 tbfleming 提到了这个问题 2017 年 3 月 26 日
视图框错误 #223
成员作者

我将其追溯到 lw.svg-parser 的 _normalizeTagAttrUnit 中的这个神奇数字:

        if (stringValue.indexOf('mm') !== -1) {
            return floatValue * 3.5433070869
        }

这是在读取width和属性时硬编码每英寸 90 像素height

视图框错误 #223
成员作者

它使用这些属性来设置一个初始矩阵,然后在整个文件中抛出单位。

视图框错误 #223
合作者
jorgerobles 评论了 2017 年 4 月 10 日 通过电子邮件  

视图框错误 #223
合作者

可能与文本解析有关?

视图框错误 #223
成员作者

它破坏了所有路径的单位。我还没有完成追踪,但我怀疑除了路径之外,它还弄乱了其他东西。

视图框错误 #223
合作者

可能是图形设计软件调整的遗留问题(AI、inkscape?)

视图框错误 #223
成员作者

90 是 Inkscape 的旧像素每英寸值。每英寸 90 像素 = 每毫米 3.5433070866 像素(上述硬编码值中的舍入误差)。

视图框错误 #223
合作者

好吧,我猜错了(https://www.google.es/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#safe=off&q=typography+point+to+mm

所以这个值最好作为参数传递,不是吗?

视图框错误 #223
成员作者

所以这个值最好作为参数传递,不是吗?

短期,是的。从长远来看,自动检测每英寸 px 会很好。解析器尝试这样做但失败了:

  • 它使用宽度、高度、视图框来计算单位(确定)
  • 读取宽度时假定每英寸 90 像素(不正确,抛出上述计算)
视图框错误 #223
成员作者

实际上,最好的短期方法:在 _parseViewBoxAttr() 中注释掉这些行

        this.tag.scale(scaleX, scaleY)
        this.tag.translate(-translateX, -translateY)

这是错误地尝试进行我们无论如何都不期望的转换。我的代码修复了每英寸的像素并处理了视图框。

视图框错误 #223
合作者

我们有一个 svg-parser 的分支。最近我刚刚将 src 文件复制到 lib/vendors,因为 npm 使用 git repo 驱动代码在构建时发疯(我确定我做的不好,但没有解释是什么在做这种行为)

视图框错误 #223
成员作者

我想我将删除 npm 模块并将其作为 git 子模块引入。那应该使维护更容易。

视图框错误 #223
成员作者

我将它切换到一个 git 子模块并绕过了坏的 xform。这可以使用大量测试。希望它有助于解决所有每英寸像素和未对齐的嵌入式图像问题。

视图框错误 #223
合作者

暂时关闭。