当前位置: 首页 > 面试题库 >

canvas.toDataUrl返回“ data :;” 当canvas.width / height太大时

钱旻
2023-03-14
问题内容

我需要做一个svg导出png图像功能。首先,我也生成了具有base64标头类型的svg到base64 svg+xml,然后

var image=new Image();
image.src=base64Code;
image.onload = function() {
      var canvas = document.createElement('canvas');
      var context = canvas.getContext('2d');
      canvas.width = image.width;
      canvas.height = image.width;
      context.drawImage(image, 0, 0);
      png = canvas.toDataURL("image/png",1);
}`

我的canvas.width/ height可能很大。
当我使用canvas.toDataURL它返回"data:;"。当canvas.width/ height更合理时,结果正确。

有什么好办法解决这个问题吗?还是使用javascript从转换svg+xml为.png?


问题答案:

Canvas元素的最大大小在浏览器实现中会有所不同。您可以在此Q /
A中
找到这些最大尺寸的良好列表。

它们对导出方法也有限制。在我的Chrome浏览器中,toDataURL返回的结果与宽度data:;大约为 16380 * 16380的
画布的返回值相同,而我的Firefox的返回值NS_ERROR_FAILURE大约为 11150 * 11150
。其他浏览器可能根据自己的实现而具有不同的值。

因此,如果您真的想通过画布,则必须将画布的大小限制为这些最大区域。

现在,如果您可以在服务器端进行转换,则可以使用它。蜡染被称为是很好的SVG
UA,并且应该能够正确转换SVG,除非在SVG <foreignObject>元素内还可以渲染HTML 。

在这种情况下,最好的方法是使用像 phantomjs 这样的无头浏览器来截取渲染页面的真实屏幕截图。

另一种方法是将较大的SVG绘制到较小的画布上,然后在服务器端或通过字节操作合并生成的PNG图像(可能需要一些额外的工作)。



 类似资料:
  • 问题内容: 所以我正在使用谷歌地图,我得到的照片看起来像这样 我需要保存。我发现了这一点: 但是我遇到了这个问题: 未捕获到的SecurityError:无法在“ HTMLCanvasElement”上执行“ toDataURL”:受污染的画布可能无法导出。 我搜索了修复程序。我在这里找到了如何使用CORS,但仍然无法将这两段代码捆绑在一起以使其正常工作。也许我做错了方法,并且有一种更简单的方法?

  • 我在ViewDidLoad函数中有一些代码,它将在调用堆栈的末尾设置一个类变量。我试图重构代码,使其成为一个单独的函数,它将返回值,而不是设置类变量。 由于我缺乏swift知识,我不确定哪里出了问题,我的函数似乎返回得太厄尔了,因为我可以在调试器中告诉我,它在被设置为之前跳转到return。 我还可以在调试器中看到,内部函数在返回主函数后调用。 如何等待内部调用完成后再返回?或者什么是正确的快速方

  • 我正在安装Jolokia的tomcat上运行这个。 我得到的是这个 {"error_type":"javax.management.运行时操作异常","错误":"javax.management.运行时操作异常:异常调用方法readBufsize","状态": 500,"stackTrace":"javax.management.运行时操作异常:异常调用方法readBufsize\n\tatorg

  • 我正在尝试使用从数据库检索的对象列表创建一个新的。首先,我从DB中获取所有元素,将其转换为流,然后使用lambda过滤结果。然后我需要一个具有设定数量的元素的页面,然而,实例化一个新的似乎并不能返回一个具有正确大小的页面。 下面是我的代码: 下面是调试的截图: 我理解如何使用Page返回数据的一部分。我展示的代码是我试图使用lambda表达式来筛选我的集合。问题是我想使用Java8的lambda通

  • 我正在使用Android的MapBox SDK在地图顶部显示geojson文件。 从geojson的“特性”中,我创建了一些“fillLayer”,每个特性都与geojson中properties对象的值相关联。我用与值对应的颜色填充每一层。 为了从特定的本地化中获取此值,我使用API调用:"queryRenderedFeature" 以下是我如何从以前创建的geojsonSource对象创建图层

  • 我目前正在学习Spring boot,我一直在测试一个项目——非常感谢任何帮助,因为我是这里的初学者。 我有一个rest控制器测试,使用Mockito,当使用Mockito.when()调用方法时,该测试似乎忽略了Then返回。 这是整个班级: 名为“testCreateUser”的测试没有问题地通过了。给我一个问题的是名为“testFindUserById”的测试。 以下是我尝试测试的控制器方法