最近做一个完整的系统,前端中涉及到一个推广图片的生成,其中推广图片是由一个变化的链接生成的二维码与一个固定图片拼接而成

实现demo:

qrcode.png:https://images.cnblogs.com/cnblogs_com/xingxia/1260814/o_241105095849_%E4%BA%8C%E7%BB%B4%E7%A0%81%E7%A4%BA%E4%BE%8B.jpg

poster.png: https://images.cnblogs.com/cnblogs_com/xingxia/1260814/o_241105095849_%E4%BA%8C%E7%BB%B4%E7%A0%81%E7%A4%BA%E4%BE%8B%E5%BA%95%E5%9B%BE.jpg

html部分:

<div>
<img id="qrcode" src="/img/promotion/qrcode.png" alt="二维码">
<img id="poster" src="/img/promotion/poster.png" alt="海报模板">
<img id="myPoster" alt="合成海报">
</div>
<button ng-click="drawPosterImage()">合成图片</button>

js部分:

//生成海报
$scope.drawPosterImage = function(){
var canvas;
canvas = document.createElement("canvas");
canvas.width = 1242;
canvas.height = 2208;
var context = canvas.getContext("2d");
context.rect(0 , 0 , canvas.width , canvas.height);
context.fillStyle = "#fff";
context.fill(); var myImage2 = new Image();
myImage2.src = $("#poster").attr("src");
myImage2.crossOrigin = 'Anonymous';
myImage2.onload = function(){
context.drawImage(myImage2 , 0 , 0 , 1242 , 2208); var myImage = new Image();
myImage.src = $("#qrcode").attr("src");
myImage.crossOrigin = 'Anonymous';
myImage.onload = function(){
context.drawImage(myImage , 499 , 1703 , 243 , 243);
var base64 = canvas.toDataURL("image/png"); //获取base64的图片流
var img = document.getElementById('myPoster');
img.setAttribute('src' , base64); }
}
}

其中生成二维码是使用的

qrcodejs2-fix
pnpm install qrcodejs2-fix

注意: 这里使用的是qrcode2-fix,因为我的是在vue3项目中,使用qrcode2会出现一些问题

前端实战之使用canvas合并图片的更多相关文章

  1. 前端canvas合并图片两种实现方式

    ---恢复内容开始--- 需求: 有一个固定的背景图,还有一个是随机生成的二维码,合并成一张图,让用户下载. 实现一:纯手写,这里为了省事生成图片我直接给的base64,其实使用qrcode.js生成 ...

  2. 前端小程序——js+canvas 给图片添加水印

    市场上各种各样的图片处理器有很多,那么作为程序员的我们是不是应该自己做一个呢?那就从加水印开始吧 html: <canvas id="shuiyinTest"> < ...

  3. canvas合并图片并长按保存

    代码实现 <div class="pho-bg"> <img src="../../assets/images/FeedbackActivity/pos ...

  4. 前端通过canvas实现图片压缩

    在一次的项目中,需要用户上传图片,目前市场随便一个手机拍出来的照片都是好几兆,直接上传特别占用带宽,影响用户体验,所以要求对用户上传图片进行压缩后再上传:那么前端怎么实现这个功能呢? 亲测可将4M图片 ...

  5. HTML5 file API加canvas实现图片前端JS压缩并上传

    一.图片上传前端压缩的现实意义 对于大尺寸图片的上传,在前端进行压缩除了省流量外,最大的意义是极大的提高了用户体验. 这种体验包括两方面: 由于上传图片尺寸比较小,因此上传速度会比较快,交互会更加流畅 ...

  6. Android Xfermode 实战 实现圆形、圆角图片

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/42094215,本文出自:[张鸿洋的博客] 1.概述 其实这篇本来准备Androi ...

  7. 减少HTTP请求之合并图片详解(大型网站优化技术)

    原文:减少HTTP请求之合并图片详解(大型网站优化技术) 一.相关知识讲解 看过雅虎的前端优化35条建议,都知道优化前端是有多么重要.页面的加载速度直接影响到用户的体验.80%的终端用户响应时间都花在 ...

  8. CSS3实战开发: 纯CSS实现图片过滤分类显示特效

    原文:CSS3实战开发: 纯CSS实现图片过滤分类显示特效 各位网友大家好,今天我要带领大家开发一个纯CSS的图片分类显示的网址导航,单纯看标题大家可能有些困惑,依照以往惯例,我先给大家演示一下实际运 ...

  9. [JavaScript] canvas 合成图片和文字

    Canvas Canvas 是 HTML5 新增的组件,就像一个画板,用 js 这杆笔,在上面乱涂乱画 创建一个 canvas <canvas id="stockGraph" ...

  10. canvas和图片之间的互相装换

    canvas和图片之间的互相装换 一.总结 一句话总结:一个是canvas的drawImage方法,一个是canvas的toDataURL方法 canvas drawImage() Image对象 c ...

随机推荐

  1. 使用 nuxi info 查看 Nuxt 项目详细信息

    title: 使用 nuxi info 查看 Nuxt 项目详细信息 date: 2024/9/5 updated: 2024/9/5 author: cmdragon excerpt: 摘要:文章介 ...

  2. 原生JavaScript实现一个简单的Promise构造函数示例

    下面demo示例,只支持实例的then和catch,代码如下: function PromiseDiffer(fn){ var self = this; this.status = 'pendding ...

  3. TypeScript 学习笔记 – Handbook 1

    前言 一转眼, 一年多没有写 TypeScript 了. 最近又要开始写了, 乘此机会打算系统学习一下, 顺便写一个学习笔记. 我接触 TypeScript 比较早, 那是 Angular 2 bet ...

  4. CSS – word-break, overflow-wrap, word-wrap, white-space

    参考 word-break 和 word-wrap 的区别 (我以为这篇已经很厉害了) 彻底搞懂word-break.word-wrap.white-space (没想到, 这一篇更厉害) white ...

  5. eclipse安装及配置jdk、tomcat

    一.安装eclipse: (安装之前一定要确认jdk是否安装,没安装的一定要安装) 官网下载:Eclipse Downloads | The Eclipse Foundation 下载好如图安装程序: ...

  6. Flutter 2.5 更新详解

    Flutter 2.5 正式版已于上周正式发布!这是一次重要的版本更新,也是 Flutter 发布历史上各项统计数据排名第二的版本.我们关闭了 4600 个 Issue,合并了 3932 个 PR,它 ...

  7. 神经网络之卷积篇:详解为什么使用卷积?(Why convolutions?)

    详解为什么使用卷积? 来分析一下卷积在神经网络中如此受用的原因,然后对如何整合这些卷积,如何通过一个标注过的训练集训练卷积神经网络做个简单概括.和只用全连接层相比,卷积层的两个主要优势在于参数共享和稀 ...

  8. [29] CSP模拟2

    A.不相邻集合 考虑值域上连续的段,可以发现连续的长度为 \(x\) 的段的贡献必定为 \(\lceil{\frac{x}{2}}\rceil\) 考虑并查集维护值域连续的段的大小,每次询问求出全部连 ...

  9. WPF下使用FreeRedis操作RedisStream实现简单的消息队列

    Redis Stream简介 Redis Stream是随着5.0版本发布的一种新的Redis数据类型: 高效消费者组:允许多个消费者组从同一数据流的不同部分消费数据,每个消费者组都能独立地处理消息, ...

  10. Word、Excel办公书的资源下载

    我是清华社编辑,下载资源没有版权问题,可供读者个人学习用,但不允许商用. 微信扫描,清华社网盘,可转自己邮箱下载.安全,无风险. <Word/Excel/PPT 2019商务办公从入门到精通&g ...