Html2canvas: SVG<img/> 是巨大的

创建于 2019-04-11  ·  9评论  ·  资料来源: niklasvh/html2canvas

请确保您正在使用最新版本的 html2canvas进行测试。
不支持旧版本,为它们报告的问题将被关闭。

请先按照一般的故障排除步骤进行操作:

  • [x] 您使用的是最新版本
  • [x] 您正在使用非缩小版的 html2canvas 进行测试,并检查了控制台中报告的任何潜在问题

错误报告:

如果我使用<img src="... .svg"> svg 是超级爆炸。 这似乎只发生在“响应式”svg 图像(在实际图像编码中没有设置高度或宽度的图像)。 图像和内容框以正确的大小呈现,但在画布上绘制时,图像采用视口高度。

这是小提琴: http :

screencapture-html2canvas-hertzen-2019-04-10-22_39_56
screencapture-html2canvas-hertzen-2019-04-10-22_40_16

规格:

  • html2canvas 版本测试: 1.0.0-rc.1 / 1.0.0-rc.0
  • 浏览器和版本:Chrome 73 / Opera 58
  • 操作系统:OS X
Bug Unverified

最有用的评论

谢谢,我会研究一下

所有9条评论

我附上了一个小提琴,我希望能说明这一点: http :

谢谢,我会研究一下

我已经研究了一段时间,似乎容器边界计算正确,但矢量图像本身采用视口的尺寸。 看起来边界和曲线边界都没有问题,所以我不确定在哪里进行更改......以前有人遇到过这样的问题吗?

经过更多调查,看起来这只会发生在“响应”的 svg 图像上——如果你在 Illustrator 中打开 svg 并在没有选中响应选项的情况下保存,它的大小会正确......基本上如果 svg 没有在其中编码了高度和宽度(Illustrator 称之为“响应式”),然后它将采用视口的尺寸。

因此,一种潜在的解决方案是使用像svg-inject (https://github.com/iconfu/svg-inject) 这样的库将<img>替换为真正的<svg> -在这里,如果您将高度和宽度应用于<img> ,它会在注入时被<svg> ,这将阻止在画布上调整大小。

这有一些缺点(例如使用编码的 base64 src 时,或者如果您有多个具有相同结构和内联类样式的 svg),但也许这会帮助其他人解决这个问题。 我已经稳定地工作了几天,这是迄今为止我拥有的最佳解决方案。 如果 svg 没有编码的高度/宽度值,我找不到任何实际的html2canvas代码会阻止在画布上调整 svg 图像的大小。

所以我放弃了这个,但我找到了与如何在画布上渲染/绘制 svg 相关的解决方案。 具体来说,在renderNodeContent如果我们能弄清楚如何确定图像是否是 svg 以及是否缺少编码的高度/宽度(响应式),那么我们可以绘制具有与视口匹配的尺寸的 svg( width = viewport.width, height = (image.height * viewport.width) / image.width)) 那么理论上这可以工作。 我只是不确定如何确定 svg 图像是否缺少这些高度和宽度值。

这里有任何更新吗?

不是来自我,我已经停止处理这个问题,但希望上面的评论会有所帮助。

嗨,我有同样的问题。
我的图像标签包含style='transition: transform 0.6s;'样式。 没有这个,图像渲染正确。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

yasergh picture yasergh  ·  5评论

koreanman picture koreanman  ·  4评论

wbarrantes picture wbarrantes  ·  3评论

tjchambers32 picture tjchambers32  ·  3评论

AlphaDu picture AlphaDu  ·  4评论