js canvas实现5张图片合成一张图片


Posted in Javascript onJuly 15, 2019

本文具体要实现的效果类似下面这张图片,主题流程大概是,页面上有类似这样布局的结构,点击中间那个紫色的按钮就会生成一张这样的图片,并且能够让用户下载图片的

js canvas实现5张图片合成一张图片

1、首先我们布局页面的时候用的都是图片来布局成这个样子[CSS自己脑补],class为pho-bg这一段是页面开始显示的结构,几张图片定位,按钮在中间的样子。class为photo的就是用来到时候放置生成的图片。canvas就是画布。至于下面的两张图片其实就是按钮的图片和背景图,到时候一并加入画布里面【不过在页面的时候不显示】

<div class="pho-bg">
 <img src="ossweb-img/man-1.png" class="man man-1" id="man-1" alt="">
 <img src="ossweb-img/man-2.png" class="man man-2" id="man-2" alt="">
 <img src="ossweb-img/man-3.png" class="man man-3" id="man-3" alt="">
 <img src="ossweb-img/man-4.png" class="man man-4" id="man-4" alt="">
 <a href="javascript:;" class="btn" title=""></a>
 <img src="ossweb-img/sen.png" class="sen1" id="sen1" alt="">
 <img id="show-pic" alt="">
 </div>
 <div class="photo"></div>
 <canvas id="myCanvas" width="750" height="1180"></canvas>
 <img src="ossweb-img/bg1.jpg" id="bg1" alt="">
 <img src="ossweb-img/btn.png" id="btn1" alt="">

2、重要的是js部分,这里面有几个部分

  • 在点击按钮时隐藏掉本来的页面,显示画布生成的图片
  • canvas.width,canvas.height是设置你生成的图片的大小。举个例子:如果我在canvas的html标签里面设置的width=750,height=1180,但是在js里面设置了canvas.width=500,canvas.height=500,那么生成的图片的大小就会是500*500.
  • 使用createPattern来制作图片的背景图
  • 使用drawImage()来制作组成图片的小元素也就是红、黄、蓝、绿、紫那几张图片
  • 最后用toDataURL()将画布的内容转为图片并且渲染到页面上
$('.btn').click(function() {
 $('.pho-bg').hide();
 // $('#myCanvas').show();
 var man1 = document.getElementById("man-1"),
 man2 = document.getElementById("man-2"),
 man3 = document.getElementById("man-3"),
 man4 = document.getElementById("man-4"),
 sen1 = document.getElementById("sen1"),
 btn1 = document.getElementById("btn1"),
 canvasBg = document.getElementById("bg1");
 
 
 var canvas = document.getElementById("myCanvas");
 ctx = canvas.getContext("2d");
 canvas.width = 750;
 canvas.height = 1180;
 // 制作背景图
 var patBg = ctx.createPattern(canvasBg, "repeat");
 ctx.rect(0, 0, 750, 1180);
 ctx.fillStyle = patBg;
 ctx.fill();
 // 将man1,man2,man3,man4,sen1,btn加入画布
 ctx.drawImage(man1, 0, 0, 341, 474);
 ctx.drawImage(man2, 410, 0, 341, 474);
 ctx.drawImage(man3, 0, 474, 341, 474);
 ctx.drawImage(man4, 410, 474, 341, 474);
 
 ctx.drawImage(sen1, 40, 950, 669, 109);
 ctx.drawImage(btn1, 150, 350, 449, 288);
 var newImg = new Image();
 newImg.src = canvas.toDataURL("image/png");
 
 $('.photo').append(newImg);
 
 });

最后的结果生成的图片就是这样子的

js canvas实现5张图片合成一张图片

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery 1.3 和 Validation 验证插件1.5.1
Jul 09 Javascript
改进UCHOME的记录发布,增强可访问性用户体验
Jan 17 Javascript
js相册效果代码(点击创建即可)
Apr 16 Javascript
javascript常用函数归纳整理
Oct 31 Javascript
gulp-uglify 与gulp.watch()配合使用时报错(重复压缩问题)
Aug 24 Javascript
javascript基于原型链的继承及call和apply函数用法分析
Dec 15 Javascript
JS实现禁止高频率连续点击的方法【基于ES6语法】
Apr 25 Javascript
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
Oct 25 Javascript
JavaScript实现小球沿正弦曲线运动
Sep 07 Javascript
详解微信图片防盗链“此图片来自微信公众平台 未经允许不得引用”的解决方案
Apr 04 Javascript
ES6 Promise对象的应用实例分析
Jun 27 Javascript
VUE Elemen-ui之穿梭框使用方法详解
Jan 19 Javascript
js使用文件流下载csv文件的实现方法
Jul 15 #Javascript
基于Taro的微信小程序模板消息-获取formId功能模块封装实践
Jul 15 #Javascript
微信小程序开发技巧汇总
Jul 15 #Javascript
微信小程序中如何计算距离某个节日还有多少天
Jul 15 #Javascript
微信小程序基础教程之worker线程的使用方法
Jul 15 #Javascript
使用vue-router在Vue页面之间传递数据的方法
Jul 15 #Javascript
微信小程序在其他页面监听globalData中值的变化
Jul 15 #Javascript
You might like
PHP+JS+rsa数据加密传输实现代码
2011/03/23 PHP
php函数指定默认值方法的小例子
2013/12/04 PHP
PHP count()函数讲解
2019/02/03 PHP
php7 list()、session及其他模块的修改实例分析
2020/05/25 PHP
Javascript 八进制转义字符(8进制)
2011/04/08 Javascript
JavaScript设计模式之策略模式实例
2014/10/10 Javascript
Javascript实现可旋转的圆圈实例代码
2015/08/04 Javascript
Angular2中如何使用ngx-translate进行国际化
2017/05/21 Javascript
再谈Angular4 脏值检测(性能优化)
2018/04/23 Javascript
解决angularjs中同步执行http请求的方法
2018/08/13 Javascript
使用webpack4编译并压缩ES6代码的方法示例
2019/04/24 Javascript
JS根据json数组多个字段排序及json数组常用操作
2019/06/06 Javascript
jQuery实现鼠标移入显示蒙版效果
2020/01/11 jQuery
Vue中多元素过渡特效的解决方案
2020/02/05 Javascript
JS面向对象编程实现的拖拽功能案例详解
2020/03/03 Javascript
[01:20]PWL开团时刻DAY9——听说潮汐没用?
2020/11/10 DOTA
用python实现的去除win下文本文件头部BOM的代码
2013/02/10 Python
python引用DLL文件的方法
2015/05/11 Python
Python 备份程序代码实现
2017/03/06 Python
详解使用 pyenv 管理多个版本 python 环境
2017/10/19 Python
Python随机生成均匀分布在单位圆内的点代码示例
2017/11/13 Python
Python面向对象类继承和组合实例分析
2018/05/28 Python
python实现简易内存监控
2018/06/21 Python
Python中pymysql 模块的使用详解
2019/08/12 Python
Django def clean()函数对表单中的数据进行验证操作
2020/07/09 Python
全球速卖通法国在线交易平台:AliExpress法国
2017/07/07 全球购物
中国高端家电购物商城:顺电
2018/03/04 全球购物
英国领先的独立时装店:Van Mildert
2019/10/28 全球购物
什么是类的返射机制
2016/02/06 面试题
金蝶的一道SQL笔试题
2012/12/18 面试题
介绍一下SOA和SOA的基本特征
2016/02/24 面试题
英语系本科生求职信范文
2013/12/18 职场文书
《音乐之都维也纳》教学反思
2014/04/16 职场文书
2015年党员创先争优承诺书
2015/01/22 职场文书
质量负责人岗位职责
2015/02/15 职场文书
个人借条范本
2015/05/25 职场文书