h5 canvas绘制网络图片并导出

2023-11-18

html部分:

<canvas id="shareImg"></canvas>

js部分:

设置canvas:

let canvas = document.getElementById("shareImg");
    canvas.width = 600;
    canvas.height = 600;
    let ctx = canvas.getContext("2d");
    ctx.globalAlpha = 1;

下载网络图片:

        //创建img标签
        var img = new Image();
        img.src = imgUrl;
        //跨域选项
        img.setAttribute("crossOrigin", 'Anonymous');
        //文件加载完毕
        img.onload = function () {
            //图片记载完毕
        };

绘制并导出图片:

 ctx.drawImage(img, 0, 0, 300, 300);//绘制
let url = canvas.toDataURL('image/png', 1)//导出的是base64的图片

以上是全部流程;

但是大部分情况,我们是绘制多张网络图片的,需要对这个方法进行封装;

如果有同学发现,绘制多张图片,在p c端正常,但是移动端失败,可能有一个原因是,需要提前给全部的图片下载下来,下载完毕之后统一drawImage;

下载多张 图片绘制并导出的完整方法:

 function loadAllImages(imgUrls) {
      var _load = function (imgUrl) {
        //创建img标签
        var img = new Image();
        img.src = imgUrl;
        //跨域选项
        img.setAttribute("crossOrigin", 'Anonymous');
        return new Promise((resolve, reject) => {
          //文件加载完毕
          img.onload = function () {
            resolve(img);
          };
        });

      }
      var _loadAll = function (imgUrls) {
        var loadedImageUrls = [];
        for (var i = 0, len = imgUrls.length; i < len; i++) {
          loadedImageUrls.push(_load(imgUrls[i]));
        }
        return loadedImageUrls;
      }
      return Promise.all(_loadAll(imgUrls))
    }
let canvasImageArr=[imgurl1,imgurl2,imgurl3,...];//这里替换自己的图片链接
loadAllImages([...canvasImageArr]).then(res => {
      let canvas = document.getElementById("shareImg");
      canvas.width = 600;
      canvas.height = 600;
      let ctx = canvas.getContext("2d");
      ctx.globalAlpha = 1;
      ctx.drawImage(res[0], 0, 0, 300, 300);
      ctx.drawImage(res[1], 0, 0, 504, 520);
      let url = canvas.toDataURL('image/png', 1)
      return url
    })

如果给的图片都是方形,需要绘制圆形,方法如下:

//将上面代码的ctx.drawImage()替换成如下代码:
 ctx.save();
    ctx.beginPath();
    ctx.arc(350, 290, 150, 0, 2 * Math.PI);//ctx.arc(x,y,半径,扇形的大小)
    ctx.fill();
    ctx.clip();
    ctx.drawImage(imgurl, 200, 145, 300, 300);
    ctx.restore();

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

h5 canvas绘制网络图片并导出 的相关文章

  • 为什么 foo.hasOwnProperty('__proto__') 等于 false?

    var foo bar 5 Why is foo hasOwnProperty proto 等于false 它不能来自原型链中更高层的任何对象 因为它是特定于这个对象的 EDIT 有些答案说它已开启Object prototype 但我不明
  • Android 上的 Chrome 强制隐藏地址栏

    我最近开发了一个获取混合 http https 内容的网站 因此 我总是将地址栏显示在顶部 它不会像其他网站那样自动隐藏 这就是我要说的 This https planetkde org 是网站的链接 内容是从各种来源获取的 因此无法过滤非
  • z-index 属性到底如何工作?

    如何z index实际上工作吗 它是否对未指定的元素起作用position 它是否支持具有指定的元素 即将它们放在顶部 position 像这样的数字必须是负数吗 div below div div less below div div o
  • 关闭 Godot 中的游戏

    我正在使用 Godot 创建网页游戏 为了关闭游戏 我尝试使用 get tree quit 如果我在 IDE 上使用它 它就可以工作 当我在我的服务器上尝试它时 导出项目后 它不起作用 我确信导出设置没问题 我怎样才能关闭游戏 并且 如何添
  • Ng Bootstrap 日期范围选择器 [markDisabled] 不适用于输入

    我正在尝试禁用某些日期ng 引导范围选择器 https ng bootstrap github io components datepicker overview 目前 我在弹出窗口中有一个范围选择器 并且我正在使用 markDisable
  • document.registerElement - 为什么我们需要指定“prototype”和“extends”?

    考虑我想扩展本地button元素 并创建我自己的super button元素 据我所知 它必须遵循以下模式 var SuperButton document registerElement super button prototype Ob
  • WaveSurfer JS 无法在 Firefox 中为特定的 mp3 音频文件生成图表

    我们面临着在 Firefox 中使用 wavesurfer JS 对某些特定格式的 mp3 文件绘制音频可视化 图表 的问题 它总是给我们这样的错误 传递给decodeAudioData 的缓冲区包含未知的内容类型 但同一个文件在 chro
  • 元素上的框阴影行为

    Update 在我提交错误报告后 https bugs chromium org p chromium issues detail id 763337 https bugs chromium org p chromium issues de
  • 未捕获的安全错误:阻止了具有原点的框架...访问具有原点的框架

    我已经为 SAP 解决方案 无论什么 制作了一个组件 该组件通过 iframe 嵌入到报告中 在 SAP 平台 BO 上部署报告后 我收到此错误 在 Chrome 上 但在 IE 或 FF 上也不起作用 Uncaught SecurityE
  • 使用 MailTo 链接,我可以向发件人发送副本吗?

    我们开发了一个非常简单的表单 一旦提交 就会填充一封电子邮件以发送支持票证 这些电子邮件目前发送给我们的 支持人员 但如果我们也能向发件人发送一份副本 那就更理想了 我们正在使用 mailto 链接 这可能吗 例如 我们的员工 Brad 填
  • 如何保存包含框架/iframe 的完整 html 页面?

    在网页抓取期间 我想将当前页面的 html 保存到文件中以供以后调试 browser html在大多数情况下有帮助 但是当页面包含 iframe frame 时 它 的内容不会返回browser html 我必须用类似的东西单独得到它bro
  • 什么是闭包编译器?

    如果您不知道我在说什么 请查看以下内容 http closure compiler appspot com home http closure compiler appspot com home 这是一个 JavaScript 压缩器 在他
  • 主干集合排序

    我制作了我的第一个主干应用程序 但在集合排序方面遇到了一些问题 使用这个后 var SortedFriends MyFriends sortBy function friend return friend get uid console l
  • 防止 Bootstrap IE 下拉列表在滚动条单击时关闭

    在 IE 中 单击下拉菜单滚动条时 下拉菜单将关闭 当您使用鼠标滚轮滚动它时 效果很好 这是代码层链接 https www codeply com go Uh8qadr3q2 https www codeply com go Uh8qadr
  • FB.getLoginStatus() 不起作用

    我正在尝试编写一段代码来检查用户是否登录 发现FBJS API中有一个内置方法 叫做getLoginStatus 我已经在html中实现了它 但出于某种原因 getLoginStatus 内部的alert 不会被触发 我也尝试在 init
  • Google 折线图添加对象数组

    我有一个通过解析 JSON 字符串创建的对象数组 var measurementData Html Raw JsonConvert SerializeObject this Model Item1 var stringifiedData J
  • Escape String - 在 Javascript 中输出rails字符串[重复]

    这个问题在这里已经有答案了 我正在尝试将字符串值分配给 erb 文件中的 javascript 对象 如下所示 var data name 问题是 如果name is Tom s small ears 的输出data name将会Tom x
  • IE 中带有“删除”方法的 jQuery.ajax 问题

    我有一个页面 用户可以使用按钮编辑各种内容并选择触发 ajax 调用 特别是 一个操作会导致远程调用一个 url 其中包含一些数据和 放置 请求 这 因为我使用的是宁静的 Rails 后端 会触发我的更新操作 我还有一个删除按钮 它调用相同
  • CSS 未使用 req.params 或其他内容加载

    我对节点 表达等非常陌生 我制作了一个博客应用程序 但遇到了问题 我正在使用 mongoose node express 和 ejs 当我打电话时 router get posts function req res Post find fu
  • 使用命令行将 MediaWiki 维基文本格式转换为 HTML

    我倾向于编写大量文档 因此 MediaWiki 格式对我来说很容易理解 而且比编写传统 HTML 节省了我很多时间 然而 我也写了一篇博客 发现一直从键盘切换到鼠标来输入正确的 HTML 标签会增加很多时间 我希望能够使用 Mediawik

随机推荐

  • 报错Error : Program type already present: android.support.design.widget.CoordinatorLayout$

    方法一 support依赖版本改为27 1 1并添加一下配置 implementation com android support appcompat v7 27 1 1 configurations all exclude group c
  • 工具技能学习(一):前置技能-makfile、make、.mk

    工具技能学习 一 前置技能 makfile make mk 在构建镜像的时候你肯定看到了很多的makefile文件 昨天我们也解读一些一些构建编译的makefile文件 但是有些兄弟没有这方面的经验 对于makefile文件的格式还是不是很
  • 树莓派4B之Windows XP系统安装游戏(二)

    上一篇博文 树莓派4B之Windows XP系统安装游戏 一 上上篇博文 树莓派4B安装windows xp windows 95 windows xp windows 95 for raspberry pi 4B 目录 一 获取游戏下载途
  • re模块----你也可以玩得很溜正则表达式

    目录 re模块 compile pattern flags 0 flag匹配模式 match pattern string flags 0 search pattern string flags 0 findall pattern stri
  • java file类总结

    直入正题 代码 自己可以复制去看 里面主要 介绍了文件的File类的新建 删除 重命等操作 以及File文件的属性方法 package com gx iodemo import java awt BufferCapabilities Fli
  • APP漏洞挖掘(二)同开发商的多款APP存在通用漏洞

    0x01 前言 测某一APP时 根据信息收集 测试 发现APP的后台系统存在SQL注入 XSS 弱口令 信息泄漏等漏洞 此APP本身存在逻辑漏洞与SQL注入漏洞 再通过观察酷传搜索的结果发现此APP开发商开发了三十几个APP 猜测可能存在相
  • video-09-video音频视频 进度条无法正常使用问题

    开发过程中遇到了 进度条无法使用 吓我一跳 还以为是开发有问题呢 目录 一 现象 二 原因 三 解决 一 现象 网页播放器能够正常播放文件 但是播放器的进度条只能显示进度 没办法拖动 二 原因 视频url链接缺少响应头 三 解决 https
  • Allegro整体旋转

    1 激活MOVE命令 然后在Options栏Point选择User Pick 在Find栏勾上所有ALL ON 2 空白处 右击选中Temp Group 3 选中要旋转的部分 右击选中Complete 4 点击一点作为User Pick旋转
  • spi总线之通信原理及linux驱动读写实现

    一 SPI简介 1 SPI 全称SerialPerripheral Interface 也就是串行外围设备接口 是一种高速全双工穿的同步通信总线 SPI时钟频率相比I2C要高得多 最高可以达到上百MHz SPI以主从方式工作 通常是一个主设
  • CM4 启用SPI6(cs0)

    vim boot config txt dtparam spi on dtoverlay spi6 1cs cs0 pin 18
  • VS2022+PCL1.13.0配置保姆级教程

    文章目录 VS2022 PCL1 13 0配置保姆级教程 参考博客 1 VS和PCL的下载与安装 2 配置pcl环境变量 3 配置VS项目 属性 3 1 C C 常规 SDL检查 否 3 2 C C 语言 符合模式 否 3 3 C C 语言
  • 【blender】基础操作

    blender基础操作 相机视角跟随移动 n 打开右侧工具栏 视图 锁定相机到视图 进入四视图视角 ctrl alt q 选中物体进入合适观察视角 聚焦 物体回到世界中心 alt g 物体沿y轴移动6m g y 6 物体在xy平面上移动 g
  • Angular1.x规范

    原文地址 https github com johnpapa angular styleguide tree master a1 Angular规范 Angular Team Endorsed 非常感谢领导Angular团队的Igor Mi
  • python绘制混淆矩阵

    之前就了解过混淆矩阵 但是一直没有实践 今天刚好有数据实践一下 这里记录一下代码实现过程 方便以后查阅 python绘制混淆矩阵 matplotlib实现 sklearn实现 sklearn metrics ConfusionMatrixD
  • 我也来一个“羊了个羊”

    演示以及原理讲解 源码地址 https gitee com 13026118978 sheep asheep 实现 1 定义变量 动物数组 const animals export const configData animals 动物数组
  • JAVA中的权限限定修饰符

    今日份鼓励 改变世界的根本是在改变自己 目录 一 访问权限修饰符 二 public修饰符 三 protected修饰符 四 不使用修饰符 默认修饰符 五 private修饰符 六 类的访问修饰符不使用private与protected的原因
  • HTML5-单、多选框,按钮

    属性 说明 type 指定元素的类型 text password checkbox radio submit reset file hidden image和button 默认为text name 指定表单元素的名称 value 元素的初始
  • Qt的Line使用

    当使用Qt设计师拖动 Horizontal Line 或 Vertical Line 来作为widget的分割线时 如果要给分割线设置颜色并让其生效 必须设置 frameShadow 属性为 Plain 同时使用样式表设置该分割线的颜色为指
  • 培训Python三个月拿高薪?起底人工智能“速成班”忽悠大法

    python基础教程www pythonf com 学完Python 可以上天 零基础入门 小白三天也能学会 近期 社会上兴起了各种人工智能 速成 班 声称可以通过几个月的学习 实现 转行 和人生逆袭 记者调查发现 这类机构往往存在讲师资质
  • h5 canvas绘制网络图片并导出

    html部分