phantomjs 使用 src 图像在 canvas.toDataURL 上抛出 DOM 异常 18

2023-11-25

我正在尝试使用将 svg 图像转换为 png 图像幻影:

var page = require('webpage').create();

page.evaluate(function() {

    var svg = '<svg class="tnt_tracks_svg" width="800" height="180" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/\
xlink"><rect width="10" height="10" fill="red"></rect></svg>';

    var src = 'data:image/svg+xml;base64,' + window.btoa(unescape(encodeURIComponent(svg)));

    var img = new Image();
    img.src = src;
    img.onload = function() {
        var canvas = document.createElement('canvas');
        canvas.width = img.width;
        canvas.height = img.height;
        var context = canvas.getContext('2d');
        context.drawImage(img, 0, 0);
        var src = canvas.toDataURL(); // DOM Exception 18!
    }
});

但我在调用 toDataURL 时收到 DOM 异常 18。我在其他类似的问题中看到,如果 svg 托管在其他域等中,则可能会发生这种情况...,但就我而言,我提供 svg src!。上面的代码有什么问题?为什么会引发 DOM 异常?

类似的代码看起来不错jsfiddle(没有 phantomjs,在 chrome 和 FF 中测试)。这个虚拟示例也正在使用Fabric.js:

page.includeJs("http://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.4.0/fabric.min.js", function () {
    page.evaluate(function() {
        var svg_text = '<svg width="600" height="400"><g><rect width="10" height="10" fill="red"></rect></g></svg>';

        fabric.loadSVGFromString(svg_text, function (objects, options) {
            var loadedObject = fabric.util.groupSVGElements(objects, options);

            var canvas = new fabric.Canvas('canvas');
            canvas.add(loadedObject);
            canvas.calcOffset();
            canvas.renderAll();
            console.log (canvas.toDataURL('png'));
        });
    });
});

我正在尝试在 Fabric.js 中找到相关代码,但任何帮助将不胜感激。


好吧,经过一番研究后回答我的问题......

看起来 webkit 总是设置起源清洁标记为false每次将 data-uri 字符串设置为 HTML 图像的源属性,然后将其呈现在 Canvas 元素上。 Firefox 和 Chrome(例如)在某些情况下允许这样做,但 webkit 不允许。

Fabric.js 不会遇到这个问题,因为它将形状渲染到画布中,但不使用数据 uri,因此画布不会被污染。

另一种解决方案是使用canvg and SVG.toDataURL.

参考资料在这里:

问题解释:http://svgopen.org/2010/papers/62-From_SVG_to_Canvas_and_Back/#security_issues

Webkit 问题:几个,参见示例this and this

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

phantomjs 使用 src 图像在 canvas.toDataURL 上抛出 DOM 异常 18 的相关文章

  • dojo dijit.form.DateTextBox 约束不起作用,datetextbox

    嗨 我是 javascript 和 dojo 的新手 我正在尝试使用两个带有下拉日历的 dijit DateTextBox 来建立数据库查询的日期范围 一旦选择了开始日期或结束日期 我想限制可用的日期 以便不可能选择按时间顺序排列在开始日期
  • 在 javascript/jquery 中将光标更改为等待

    当调用函数时 如何让光标更改为此加载图标以及如何将其更改回 javascript jquery 中的普通光标 在你的 jQuery 中使用 body css cursor progress 然后又恢复正常 body css cursor d
  • 主干视图 DOM 元素已删除

    我一直在阅读有关 Backbone js 僵尸 或内存泄漏 问题的信息 基本上 当您不再需要该元素时 您必须从 DOM 中解除绑定并删除该元素 以确保所有事件也被删除 现在 我有一个包含几个容器的单页应用程序 div div div div
  • 每 3 秒重复一次动画

    我正在使用 WOW js 和 animate css 现在我正在将 CSS 运行到 Infinite 我想知道如何让我的课程运行 3 秒停止并再次开始到无限 My html img src images fork png class for
  • 为什么 JavaScript base-36 转换看起来不明确

    我目前正在编写一段使用 Base 36 编码的 JavaScript 我遇到了这个问题 parseInt welcomeback 36 toString 36 看来要回归了 welcomebacg 我在 Chrome 开发者控制台和 Nod
  • 尝试将布尔 C# 变量传递给 javascript 变量并将其设置为 true

    在我的 aspx 页面中 我将布尔变量 C 传递给需要布尔类型的 javascript 函数 但遇到了问题 但是 C 变量返回 True 而 javascript 不喜欢大写 myjavascript 如果我将 c 变量转换为字符串 那么我
  • 如何重定向到 instagram://user?username={username}

    我的 html 页面上有这个链接 可以在特定用户上打开 Instagram 应用程序 a href Link to Instagram Profile a 我一直在寻找自动运行 url instagram user username USE
  • 使用 JavaScript 使链接保持活动状态并在单击时显示悬停效果

    I am struggling to make this work I d like to make it where if O F is clicked the hover state stays active if another li
  • 如何防止 Iframe 在与浏览器交互后弄乱浏览器的历史记录?

    因此 就我而言 我使用 Iframe 将 Grafana 附加到我的页面 这为我提供了漂亮且易于使用的图表 可以注意到 每次在图表上进行放大或缩小 使用鼠标单击 交互后 Grafana 的 Iframe 都会在我的 Angular 页面上触
  • 使用 Angular 下载具有动态 src 的脚本

    Angular 提供了通过动态名称动态加载模板的方法ng include 该部分中的内联 JS 和 CSS 可以正常加载 但没有一个好的方法来下载带有动态 url 的脚本 我们需要下载脚本 相对于调用它们的 html 部分的路径 即我们有一
  • 从未用 @flow 标记的导入文件中获取类型定义

    TL DR我怎么告诉flow从未声明的导入模块导入类型定义 flow 加长版 流接缝能够从不使用流语法的文件中派生类型 请参阅示例 示例文件 flow js if Math random lt 0 5 var y hello else va
  • Jquery/Javascript 上传和下载文件,无需后端

    是否可以在没有后端服务器的情况下在 JavaScript 函数中下载和上传文件 我需要导出和导入由 JavaScript 函数生成的 XML 我想创建按钮 保存 xml 来保存文件 但我不知道是否可行 另一方面 我希望将 XML 文件直接上
  • Grails 在 javascript 内的 GSP 站点中使用 grails var

    我有一个在 GSP 文件中的 javascript 代码中使用 grails 变量值的问题 例如 我有一个会话值session getAttribute selectedValue 我想在 javascript 代码部分使用这个值 我现在的
  • Python GTK+ 画布

    我目前正在通过 PyGobject 学习 GTK 需要画布之类的东西 我已经搜索了文档 发现两个小部件似乎可以完成这项工作 GtkDrawingArea 和 GtkLayout 我需要一些基本函数 如 fillrect 或 drawline
  • 为 illustrator 导出脚本以保存为 web jpg

    任何人都可以帮我为 illustrator CC2017 编写一个脚本 将文件以 JPG 格式导出到网络 旧版 然后保存文件并关闭 我有 700 个文件 每个文件有 2 个画板 单击 文件 gt 导出 gt 另存为 Web 旧版 然后右键文
  • Safari 支持 JavaScript window.onerror 吗?

    我有一个附加到 window onerror 的函数 window onerror function errorMsg url line window alert asdf 这在 firefox chrome 和 IE 中工作正常 但在 s
  • 如何仅在最后一个
  • 处给出透明六边形角度?
  • 我必须制作这样的菜单 替代文本 http shup com Shup 330421 1104422739 My Desktop png http shup com Shup 330421 1104422739 My Desktop png
  • 在 React.js 中编辑丰富的数据结构

    我正在尝试为数据结构创建一个简单的基于网格的编辑器 但我在使用 React js 时遇到了一些概念问题 他们的文档对此没有太大帮助 所以我希望这里有人可以提供帮助 首先 将状态从外部组件传输到内部组件的正确方法是什么 是否有可能将内部组件中
  • 导致回发到与弹出窗口不同的页面

    我有一个主页和一个详细信息页面 详细信息页面是从主页调用的 JavaScript 弹出窗口 当单击详细信息页面上的 保存 按钮时 我希望主页 刷新 是否有一种方法可以调用主页的回发 同时还可以从详细信息页面维护保存回发 Edit 使用win
  • 如何从图像输入中获取 xy 坐标?

    我有一个输入设置为图像类型

随机推荐

  • 为什么我的过滤器版本与 Swifts 的性能如此不同?

    作为练习 我重写了一些 Swift 的高阶函数 其中一个是 filter 我决定测量我的版本 filter反对斯威夫特使用乐器 我对结果感到相当困惑 这是我的过滤器版本 我承认这可能是不正确的 extension Array func my
  • 在 Delphi 中显示某些 JPG 文件时出现问题

    我尝试使用 TImage 组件在 Delphi 中打开一些 JPEG 文件 我还添加了 Jpeg 单元 我可以打开大部分 jpg 文件 没有问题 但是当我尝试打开一些 JPG 时 程序只是抛出异常 我还尝试在设计模式下加载该图像 但存在一些
  • 使用java确定Microsoft Office的版本

    我编写了一个程序 用于创建一组输出到 Excel 电子表格的数据 我最初使用 jexcel 库将数据写入文件 但我想更新程序 以便它可以检查并查看是否应该创建 xls 或 xlsx 文件 然后写入适当的文档类型 Apache POI 似乎是
  • c# HttpWebRequest POST'ing 失败

    所以我正在尝试将一些内容发布到网络服务器 System Net HttpWebRequest EventReq System Net HttpWebRequest System Net HttpWebRequest Create url S
  • 是否可以在
     标签内使用 CDATA                
                

    我想在 HTML 页面中显示异常跟踪 一种方法是转义异常跟踪中的 HTML 特殊字符并将其转储到 pre tag 虽然它有效 但效率非常低 我认为一种方法是用 CDATA 包装跟踪 我已经尝试过 但没有显示任何内容 我的问题是 这可以做到吗
  • Android:在 Cloudinary 中上传照片,并在 HttpURLConnection 中进行进度回调

    我正在尝试修改cloudinary的开源库 以便我可以收听照片上传的进度 该库类包含一个 MultipartUtility java 类 我对其进行了修改以监听上传进度 修改前的原代码可以在github上找到 https github co
  • 使用 Visual studio 2008 进行 Prefast

    有什么办法可以启用Prefast in Visual Studio 2008 专业版添加 我正在尝试编译本机 C 代码 我尝试过以下事情 下载的Windows SDK 将编译器的 Bin Include Lib 路径设置为 SDK 添加了
  • 为 PinterestLikeAdapterView 调用 notificationDataSetChanged() 时如何避免刷新单元格?

    背景 我正在使用PinterestLikeAdapterView 库显示一些来自互联网的图像 它类似于 gridView 但每个单元格的高度不同 问题 由于我使用这个库来显示来自互联网的图像 因此调用notifyDatasetChanged
  • id 的含义是什么?

    我正在 尝试 学习 Objective C 并且不断遇到这样的短语 id init 我明白了id是 Objective C 语言关键字 但是 编译器专门处理id就指针类型转换规则而言 Does id自动将其右侧的对象指定为指针 id是指向任
  • C# 中的数字文本框 - WPF [重复]

    这个问题在这里已经有答案了 我想在 WPF 中创建一个只接受数字的文本框 我研究过 人们说使用按键事件或屏蔽文本框 但它们是在 Windows 窗体中 For WPF private void textBox1 PreviewTextInp
  • xslt变量范围及其用法

    我正在学习 xslt 并且有一个关于如何在 diff 中使用 xslt 变量的问题 对于每个循环 我知道 xslt 不是过程语言 因此在 for 循环中声明的变量不能在另一个循环中访问 但是有什么方法可以声明全局变量 然后在第一个 for
  • Grunt 不更新主 scss 文件

    我有一个项目 将 GruntJS 与 grunt contrib sass grunt contrib watch 和 grunt newer 一起使用 我的主 app scss 文件使用 import 指令导入一些 scss 文件 例如
  • 猫鼬在预保存挂钩中获取数据库值

    我想知道在预保存猫鼬钩子中脏道具的 干净 值是多少 如下所示 UserSchema pre save function next var user this if user isModified password i want to kno
  • 删除该类后,JQuery 选择器仍然有效?

    我有两个协同工作的 jquery 函数 一个依赖于类 另一个删除类 一旦它被删除 我希望该功能停止工作 但它会继续吗 这是怎么回事 这里是fiddle 自己试试吧 div class container disabled a href ww
  • 为什么双切片 numpy 数组的赋值不起作用?

    为什么以下几行不能按我的预期工作 import numpy as np a np array 0 1 2 1 1 a a 1 1 3 print a gt gt gt 0 1 2 1 1 I would expect 0 1 2 3 3 这
  • 在 Xlib 中捕获按钮事件,然后将事件传递给客户端

    我正在开发一个窗口管理器 主要是作为练习 但我遇到了一个问题 我希望能够将单击的窗口提升到堆栈顶部 目前 我在 Button1 和 ControlMask 上使用 XGrabButton 来允许移动窗口 当我按住 Ctrl 键并单击窗口时
  • 使用VFPOLEDB驱动程序读取DBF

    我正在使用 VFPOLEDB 驱动程序读取 DBF 文件 并且不断收到此错误 但我不知道为什么以及如何解决该问题 提供程序无法确定十进制值 例如 该行刚刚创建 Decimal 列的默认值不可用 并且使用者尚未设置新的 Decimal 值 这
  • Web 应用程序中的 context.xml 与 web.xml

    我正在开发一个小型网络应用程序 目标是营造一种受欢迎的氛围index html使用 Ajax 一个 servlet 来处理 ajax 请求的页面 虽然我以为我会没事的web xml只是 我不想部署到 但要 MyApp NetBeans 的项
  • 如何避免“必须管理传递到选择字段的实体。也许将它们保留在实体管理器中?”

    生成的实体从现有数据库 生成的CRUD控制器 但它不适用于异常消息 必须管理传递到选择字段的实体 也许将它们保留在实体管理器中 Entity Question ORM Table name question indexes ORM Inde
  • phantomjs 使用 src 图像在 canvas.toDataURL 上抛出 DOM 异常 18

    我正在尝试使用将 svg 图像转换为 png 图像幻影 var page require webpage create page evaluate function var svg