请确保您正在使用最新版本的 html2canvas进行测试。
不支持旧版本,为它们报告的问题将被关闭。
如果我使用<img src="... .svg">
svg 是超级爆炸。 这似乎只发生在“响应式”svg 图像(在实际图像编码中没有设置高度或宽度的图像)。 图像和内容框以正确的大小呈现,但在画布上绘制时,图像采用视口高度。
这是小提琴: http :
我附上了一个小提琴,我希望能说明这一点: 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;'
样式。 没有这个,图像渲染正确。
最有用的评论
谢谢,我会研究一下