首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >未知源中心SVG到已知SVG

未知源中心SVG到已知SVG
EN

Stack Overflow用户
提问于 2018-04-28 13:24:25
回答 1查看 84关注 0票数 0

我有一个程序(基于Java)从数据中生成SVG。用户可以上传他们自己的SVG,这样他们就可以用于我在最终SVG图像中使用的图标和标记。

这是如何工作的,我有一个更大的矩形,我取代了SVG提供的.

代码语言:javascript
代码运行次数:0
运行
复制
<svg xmlns="http://www.w3.org/2000/svg" height="176" version="1.1" viewbox="0 0 264 176" width="264">
   <!-- my own stuff -->
   <rect x="50" y="50" width="100" height="100" fill="none" class="placeholder" />
</svg>

现在,我可以用其他SVG替换代码中的rect,并添加宽度和高度属性,这样它就可以扩展。

代码语言:javascript
代码运行次数:0
运行
复制
<svg xmlns="http://www.w3.org/2000/svg" height="500" version="1.1" viewbox="0 0 500 500" width="500">
   <!-- my own stuff -->
   <svg x="50" y="50" width="100" height="100"  version="1.1" xmlns="http://www.w3.org/2000/svg">
    <!-- inner unknown XML -->
    </svg>
</svg>

问题是,如果外部SVG不是正方形(1:1),那么总是会得到水平或垂直方向的偏移量。这可以通过从外部SVG读取viewBox的值来补救,但这些值并不总是存在的。

如果我在Chrome中打开外部SVG,我可以看到宽度和高度的计算值,但是在我的Java代码中,我当然不能访问计算出来的宽度和高度。

我看到的唯一解决方案是强迫用户包含一个viewBox属性。有没有其他解决方案,比如根据元素的(计算)质心定位元素?

EN

回答 1

Stack Overflow用户

发布于 2018-04-28 21:33:30

SVG渲染器用于确定内部大小的完整算法在SVG内容视图的内在大小特性下的规范中,但为了在另一个内嵌svg,可以简化如下:

  • 外部SVG上的xy属性将被忽略
  • 如果外部SVG具有viewBox属性,请使用它。否则,
    • 如果外部SVG至少缺少widthheight中的一个,则假定为100%
    • 如果widthheight位于绝对的字体相对单元中,则将它们解析为用户单元。
    • 如果widthheight以百分比单位表示,请将它们解析为占位符大小的百分比到用户单位。

  • 使用解析值设置viewBox of "0 0 <width> height>"
  • widthheight设置为占位符值
  • preserveAspectRatio设置为在视图端口中定位viewBox
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50077024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档