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绘制网络图片并导出 的相关文章

  • 如何抑制窗口鼠标滚轮滚动...?

    我正在开发嵌入页面中的画布应用程序 我有它 因此您可以使用鼠标滚轮放大绘图 但不幸的是 这会滚动页面 因为它是文章的一部分 当我在 dom 元素上滚动鼠标滚轮时 是否可以阻止鼠标滚轮在窗口上滚动 附加鼠标滚轮 不是 Gecko DOMMou
  • 可以使用 jQuery 或 Javascript 将图片的特定部分用作链接吗?

    我有这个想法 将图片 而不是文本 的各个部分链接到不同的页面或网站 并且我想在不实际创建不同的照片并将它们彼此靠近的情况下完成 这样看起来就像是一张完整的图片 这里有人知道如何使用 JavaScript 的变体 例如 jQuery 或纯 J
  • Node.js:如何在检索数据(块)时关闭响应/请求

    我正在用 node js 构建一个应用程序 它加载多个页面并分析内容 因为 node js 发送块 所以我可以分析这些块 如果一个块包含例如索引 nofollow 我想关闭该连接并继续其余部分 var host example com to
  • 除了更改标题之外,如何在 Firefox 中强制另存为对话框?

    有没有办法在 ff 中强制打开 www example com example pdf 的另存为对话框 我无法更改标题 如果您可以将文件以 Base64 格式输出到客户端 则可以使用 data uri 进行下载 location href
  • 音频 blob 的 URL.createObjectURL 在 Firefox 中给出 TypeError

    我正在尝试从创建的音频 blob 创建对象 URLgetUserMedia 该代码在 Chrome 中可以运行 但在 Firefox 中存在问题 错误 当我打电话时stopAudioRecorder 它停在audio player src
  • 保持未知数量的 div 居中,每行最多 4 个

    我有一个简单的问题 但我自己无法解决 简而言之 有一个未知电话我必须在页面中放置的元素数量 最多 每行 4 个元素 但仍居中 此图片给您一个提示 我为了示例而设置它 详细 在上图中我涵盖了不同的场景 例如 如果总共有 5 个元素 则应使用第
  • Jquery/Javascript 上传和下载文件,无需后端

    是否可以在没有后端服务器的情况下在 JavaScript 函数中下载和上传文件 我需要导出和导入由 JavaScript 函数生成的 XML 我想创建按钮 保存 xml 来保存文件 但我不知道是否可行 另一方面 我希望将 XML 文件直接上
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • jquery从变量中删除html元素

    我将 html 保存在变量中 var itinerary events today html 我有很多 html 和一个按钮我想删除 它的 ID 为 myButton 如何从变量中保存的 html 中删除它 我建议这种方法 var itin
  • 如何在使用页面锚点导航时设置“激活”类以在 Angular 2 中引导导航栏?

    我正在使用 Angular 2 和 Bootstrap 4 创建一个单页网站 我创建了一个始终位于页面顶部的导航栏组件 并且我正在使用页面锚点导航 id 请注意 我还没有创建路由模块 到目前为止还没有必要这样做 导航栏代码如下
  • Grails 在 javascript 内的 GSP 站点中使用 grails var

    我有一个在 GSP 文件中的 javascript 代码中使用 grails 变量值的问题 例如 我有一个会话值session getAttribute selectedValue 我想在 javascript 代码部分使用这个值 我现在的
  • 如何使用tampermonkey模拟react应用程序中的点击?

    我正在尝试使用 Tampermonkey 脚本模拟对 React 元素的点击 不幸的是 由于 React 有自己的影子 DOM 所以天真的方法使用document querySelector 不工作 我遇到了一些需要修改 React 组件本
  • Python GTK+ 画布

    我目前正在通过 PyGobject 学习 GTK 需要画布之类的东西 我已经搜索了文档 发现两个小部件似乎可以完成这项工作 GtkDrawingArea 和 GtkLayout 我需要一些基本函数 如 fillrect 或 drawline
  • 为什么在 Internet Explorer 中访问 localStorage 对象会引发错误?

    我正在解决一个客户端问题 Modernizr 意外地没有检测到对localStorageInternet Explorer 9 中的对象 我的页面正确使用 HTML 5 文档类型 并且开发人员工具报告该页面具有 IE9 的浏览器模式和 IE
  • 有没有办法阻止 prettier / prettier-now 将函数参数分解为新行

    当使用 prettier prettier now 在保存时进行格式化时 当一个函数包装另一个函数时 它会中断到一个新行 我想知道是否有办法阻止这种行为 例如 期望的输出 app get campgrounds id catchAsync
  • Javascript 纪元时间(以天为单位)

    我需要以天为单位的纪元时间 迄今为止 我已经看到过有关如何翻译它的帖子 但几天后就没有了 我对纪元时间很不好 我怎么能得到这个 我需要以天为单位的纪元时间 我将解释为您想要自纪元以来的天数 纪元本身是第 0 天 或第 1 天的开始 无论您如
  • Safari 支持 JavaScript window.onerror 吗?

    我有一个附加到 window onerror 的函数 window onerror function errorMsg url line window alert asdf 这在 firefox chrome 和 IE 中工作正常 但在 s
  • 无效字符错误:“fred”

    我确信他一定是一个新手问题 简单来说 我想定义我的第一个 Polymer dart 组件 只是我一直在同一个减速带上踢脚趾 为了使事情变得非常简单 我将其简化为一个非常简单的示例 我做了一个简单的rename示例 跑表 来自 Dart 组件
  • fullCalendar 未显示正确的结束日期

    我正在看调试页面 http jsbin com wukofacaxu edit js outputFullCalendar 官方网站的 我想安排一个活动时间为 22 09 2015 至 30 09 2015 dd mm yyyy 但它只显示
  • CSS 是否有不等于选择器?

    CSS中有类似 不等于 的东西吗 例如 我有以下代码 input 但对于某些输入 我需要将其作废 我想通过将类 reset 添加到输入标签来做到这一点 例如

随机推荐

  • 报错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部分