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

实现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. 关于安装李沐深度学习d2l包报错的解决办法(保姆教程)

    目录 目录:d2l包安装失败的解决过程 前言 一.李沐提供的安装方式 1. 创建一个新的环境 2. 激活 d2l 环境 3. 安装深度学习框架和d2l软件包 3.1 安装PyTorch的CPU或GPU ...

  2. 全网最适合入门的面向对象编程教程:44 Python内置函数与魔法方法-重写内置类型的魔法方法

    全网最适合入门的面向对象编程教程:44 Python 内置函数与魔法方法-重写内置类型的魔法方法 摘要: 在 Python 中,内置类型的行为是通过一组特殊的"魔法方法"来实现的, ...

  3. docker network macvlan

    ref: Docker 网络模型之 macvlan 详解,图解,实验完整 网卡也能虚拟化?网卡虚拟化技术 macvlan 详解 docker和macvlan与host互通  

  4. canvas图片旋转扩展出原生JS实现移动端横竖屏手写签名示例

    前提知识 canvas是提供了各种各样的接口去控制画布,比如旋转rotate方法. 这里的旋转并不是真的把这个画布旋转了,例如ctx.rotate(90 * Math.PI / 180)顺时针旋转90 ...

  5. Angular 18+ 高级教程 – 初识 Angular

    Before Starting 深入学习 Angular 是一件非常耗时耗力的事情. 实施 Angular 到项目中同样也是一件非常耗时耗力的事情. 在我们做出这么大的投入之前,我们有必要先思考以下几 ...

  6. C#内存缓存

    把缓存数据放到应用程序的内存,内存缓存中保存的是一些列键值对 :生命周期就是关闭程序的时候,内存数据就会被销毁 : IMemerCache  接口 Get 获取缓存 Set 设置缓存

  7. 基于腾讯云短信接口和nodejs服务器实现手机号验证码

    知识储备:js基础.nodejs基础.ajax基础: 1. 手机验证码原理 表单提交,把手机号码传送到后端:后端拿到手机号码后根据相关算法随机形成一个验证码,并将其保存在数据库:用户拿到验证码后将验证 ...

  8. CSharp的Where底层实现

    using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using Syst ...

  9. 你所理解的 mvvm 模型

    mvvm 是Model-View-ViewModel 数据驱动视图模型,是mvc 的改进版 ,mvvm把界面ui和业务逻辑分离 ,model 是data属性的数据 , view 是模板结构 ,view ...

  10. [Vue warn]: Error in v-on handler (Promise/async): "TypeError: Object(...) is not a function"

    引用外部发文件时候,只是部分引用,所以原本是解构方式引用的,我忘记加{ }了