将数据 URI 转换为图像数据

2024-03-25

/**
 * Converts data URI in 'image/png' format to an image data object
 * @param dataURL Base64 encoded string
 * @returns {ImageData/undefined}
 */
convertDataURLToImageData: function (dataURL) {
    if (dataURL !== undefined && dataURL !== null) {
        var canvas, context, image, imageData;
        canvas = document.createElement('canvas');
        canvas.width = 470;
        canvas.height = 470;
        context = canvas.getContext('2d');
        image = new Image();

        image.addEventListener('load', function(){
            context.drawImage(image, 0, 0, canvas.width, canvas.height);
            imageData = context.getImageData(0, 0, canvas.width, canvas.height);
            //how do i return this?
        }, false);
        image.src = dataURL;

        return imageData;
     }
}

考虑上面的代码片段,如果我想从数据 URL 获取图像数据数组,并将其绘制在画布上,如何返回图像数据?


问题是你的函数是异步的,因为你正在等待load event.

然后,你可以使用承诺:

function convertURIToImageData(URI) {
  return new Promise(function(resolve, reject) {
    if (URI == null) return reject();
    var canvas = document.createElement('canvas'),
        context = canvas.getContext('2d'),
        image = new Image();
    image.addEventListener('load', function() {
      canvas.width = image.width;
      canvas.height = image.height;
      context.drawImage(image, 0, 0, canvas.width, canvas.height);
      resolve(context.getImageData(0, 0, canvas.width, canvas.height));
    }, false);
    image.src = URI;
  });
}
var URI = "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAABMLAAATCwAAAAAAAAAAAABsiqb/bIqm/2yKpv9siqb/bIqm/2yKpv9siqb/iKC3/2yKpv9siqb/bIqm/2yKpv9siqb/bIqm/2yKpv9siqb/bIqm/2yKpv9siqb/bIqm/2yKpv9siqb/2uLp///////R2uP/dZGs/2yKpv9siqb/bIqm/2yKpv9siqb/bIqm/2yKpv9siqb/bIqm/2yKpv9siqb/bIqm/////////////////+3w9P+IoLf/bIqm/2yKpv9siqb/bIqm/2yKpv9siqb/bIqm/2yKpv9siqb/bIqm/2yKpv///////////+3w9P+tvc3/dZGs/2yKpv9siqb/bIqm/2yKpv9siqb/TZbB/02Wwf9NlsH/TZbB/02Wwf9NlsH////////////0+Pv/erDR/02Wwf9NlsH/TZbB/02Wwf9NlsH/TZbB/02Wwf9NlsH/TZbB/02Wwf9NlsH/TZbB//////////////////////96sNH/TZbB/02Wwf9NlsH/TZbB/02Wwf9NlsH/TZbB/02Wwf9NlsH/TZbB/02Wwf////////////////+Ft9T/TZbB/02Wwf9NlsH/TZbB/02Wwf9NlsH/E4zV/xOM1f8TjNX/E4zV/yKT2P/T6ff/////////////////4fH6/z+i3f8TjNX/E4zV/xOM1f8TjNX/E4zV/xOM1f8TjNX/E4zV/xOM1f+m1O/////////////////////////////w+Pz/IpPY/xOM1f8TjNX/E4zV/xOM1f8TjNX/E4zV/xOM1f8TjNX////////////T6ff/Tqng/6bU7////////////3u/5/8TjNX/E4zV/xOM1f8TjNX/AIv//wCL//8Ai///AIv/////////////gMX//wCL//8gmv////////////+Axf//AIv//wCL//8Ai///AIv//wCL//8Ai///AIv//wCL///v+P///////+/4//+Axf//z+n/////////////YLf//wCL//8Ai///AIv//wCL//8Ai///AIv//wCL//8Ai///gMX/////////////////////////////z+n//wCL//8Ai///AIv//wCL//8Ai///AHr//wB6//8Aev//AHr//wB6//+Avf//7/f/////////////v97//xCC//8Aev//AHr//wB6//8Aev//AHr//wB6//8Aev//AHr//wB6//8Aev//AHr//wB6//8Aev//AHr//wB6//8Aev//AHr//wB6//8Aev//AHr//wB6//8Aev//AHr//wB6//8Aev//AHr//wB6//8Aev//AHr//wB6//8Aev//AHr//wB6//8Aev//AHr//wB6//8Aev//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==";
convertURIToImageData(URI).then(function(imageData) {
  // Here you can use imageData
  console.log(imageData);
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将数据 URI 转换为图像数据 的相关文章

随机推荐

  • celery-django 找不到设置

    我有一个 Django 项目 使用Celery http pypi python org pypi django celery用于运行异步任务 我正在 Windows XP 计算机上进行开发 启动我的 Django 服务器 python m
  • android ListView不会突出显示所选行

    在我的应用程序中 我从服务器检索用户的播放列表 并感受到ListView与数据 问题是 ListView不突出显示单击的行 为了防止愤怒的评论告诉我我不使用搜索 我尝试过以下方法 将我行中的按钮设置为不可聚焦 通过代码和 XML 设置 li
  • Java 本机接口 (JNI) 是否受 C++ ABI 兼容性问题影响?

    Java 本机接口 JNI 是否受 C ABI 兼容性问题影响 我正在开发一个 Java 应用程序 我想使用 Java 本机接口 JNI 来调用 C 库中的函数 我可以访问 C 库的代码 并且可以根据需要重建它 例如 我可以静态链接 C 运
  • 如何使用现有的 solr 核心数据创建 solr 核心?

    Solr 1 4 企业搜索服务器建议对核心副本进行大量更新 然后将其交换为主核心 我正在执行以下步骤 创建准备核心 执行索引更新 然后在准备核心上提交 优化 交换主核心和预备核心 卸载准备核心 我遇到的问题是 步骤 1 中创建的核心中没有任
  • Enlive 模板 – 添加到头部

    我的应用程序的某些页面将有自己的 js css 包含 所以我想知道如何使用 Enlive 将这些资源添加到 html 文档的头部部分 我发现 append 变压器 但没有不自动转义的 html append 或者什么是正确的方法来做到这一点
  • 污染全局命名空间

    我想这里的大多数 C 程序员都会同意污染全局命名空间是一个坏主意 但是有时这条规则可以被忽略吗 例如 我有一个需要在特定应用程序中使用的类型 我应该这样定义它 mytypes h typedef int MY TYPE foo cpp MY
  • 如何获取表示 Java 对象的序列化字节数?

    我将使用什么语法来获取表示字符串的字节数并将它们与表示字符串的字节数进行比较ArrayList例如 拿着那根绳子 我正在使用多代理代理系统通过消息发送对象 并且我想跟踪每条消息占用的空间 该方法不必非常准确 只要它与对象的实际大小成比例即可
  • 当jasper中未显示上述组件时,如何使用positionType将组件上拉?

    positionType Float 如果上面的组件拉伸 则组件上的组件会自行下拉 但如果上述组件缩小 不显示 则不会向上移动 以下是使用的版本
  • 如何在websphere中配置和使用jstl

    有谁知道如何在 websphere 中配置 jstl 我知道我们在 web xml 中使用了 taglib 指令 我在 websphere 5 1 2 中哪里可以找到 web xml 以及如何添加配置 你不需要修改web xml根本不 一些
  • jQuery 组合框/选择自动完成? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否存在用于替换选择 组合框的 jQuery 插件 我尝试了SexyCombo 它与我想要的非常接近 但
  • 2 个数组值之一颜色之一使 D3 条形图在值的相同索引处具有颜色

    我有 2 个数组 values 1 2 3 4 5 4 7 2 9 10 colors red red blue blue green green orange orange pink pink 我正在尝试构建一个 D3 条形图 其中每个条
  • .NET Windows 窗体应用程序自我更新的最佳方式是什么?

    我使用自行开发的系统 其中应用程序通过 Web 服务自行更新 然而 我似乎记得最初的 NET 销售宣传中有关组件自动更新是 NET 的内置功能的内容 让应用程序更新自身和 或其使用的程序集的最佳实践是什么 您可能想了解一下 Click On
  • 在 Cypress 中多次拦截相同的 API 调用

    是否可以使用cy intercept在同一个测试中多次拦截相同的 API 调用 我尝试了以下方法 cy intercept pathname url method POST as call1 some logic cy wait call1
  • 将 sfml 与 cmake 链接 (Windows MinGW)

    我好像无法链接SFML到我的可执行文件使用cmake CMakeLists txt cmake minimum required VERSION 3 0 0 project Tut3 set LIBS DIR Libraries add e
  • 使用 Google Cloud Platform 部署管理器模板创建存储桶

    我正在尝试使用 GCP Deployment Manager 创建存储桶 我已经完成了快速入门指南并能够创建一个compute v1 instance 但我正在尝试在 Google Cloud Storage 中创建一个存储桶 但无法获得除
  • 在 Win7 中的 ruby​​ 命令提示符下安装 Rubygems 时出错

    当我尝试在 Win7 32 位 中的 Ruby 命令提示符下安装 ruby gems 时 出现以下错误 请注意 我安装了 Ruby1 9 3 并已将 devkit DevKit tdm 32 4 5 2 20111229 1559 sfx
  • 使用backbone.js处理belongs_to关系

    我对backbone js有点陌生 我正在努力获取具有belong to关系的集合 我想获取用户列表 users GET 并且我想显示所有用户 但带有belongs to关联 例如显示用户的公司名称 有人知道解决办法吗 我正在将 Ruby
  • 在 jupyter 上安装 gnuplot

    我想用 gnuplot 绘制条形图 但我安装时遇到问题 我正在使用 jupyter anaconda 以下代码不适用于安装 conda install gnuplot py pip install gnuplot py pip instal
  • CSS/JS 中的动态 URL

    我正在拆分我的一个较大的应用程序 并引入一个 cdn url 来容纳 CSS javascript 和图像等常见对象 以避免重复 不过 我需要做的是为我们的开发环境提供单独的 URL 因此我可能有 http cdn dev example
  • 将数据 URI 转换为图像数据

    Converts data URI in image png format to an image data object param dataURL Base64 encoded string returns ImageData unde