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 相关文章推荐
setTimeout自动触发一个js的方法
Jan 15 Javascript
让jQuery Mobile不显示讨厌loading界面的方法
Feb 19 Javascript
对于jQuery性能的一些优化建议
Aug 13 Javascript
javascript数组克隆简单实现方法
Dec 16 Javascript
实例讲解jquery中mouseleave和mouseout的区别
Feb 17 Javascript
BootStrap实现邮件列表的分页和模态框添加邮件的功能
Oct 13 Javascript
原生JS实现简单放大镜效果
Feb 08 Javascript
js实现移动端编辑添加地址【模仿京东】
Apr 28 Javascript
原生JS实现自定义滚动条效果
Oct 27 Javascript
浅谈手写node可读流之流动模式
Jun 01 Javascript
原生js添加一个或多个类名的方法分析
Jul 30 Javascript
微信小程序实现拨打电话功能的示例代码
Jun 28 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
phpwind中的数据库操作类
2007/01/02 PHP
一个PHP数组应该有多大的分析
2009/07/30 PHP
Discuz 6.0+ 批量注册用户名
2009/09/13 PHP
PHP print类函数使用总结
2010/06/25 PHP
php产生随机数的两种方法实例代码 输出随机IP
2011/04/08 PHP
PHP 双链表(SplDoublyLinkedList)简介和使用实例
2015/05/12 PHP
TNC vs BOOM BO3 第一场2.13
2021/03/10 DOTA
jQuery ReferenceError: $ is not defined 错误的处理办法
2013/05/10 Javascript
JS操作Cookie写入和读取实例代码
2013/10/20 Javascript
JS短路原理的应用示例 精简代码的途径
2013/12/13 Javascript
jQuery取id有.的值的方法
2014/05/21 Javascript
JQuery右键菜单插件ContextMenu使用指南
2014/12/19 Javascript
Bootstrap每天必学之导航组件
2016/04/25 Javascript
JS全局变量和局部变量最新解析
2016/06/24 Javascript
浅谈移动端之js touch事件 手势滑动事件
2016/11/07 Javascript
nodejs爬虫遇到的乱码问题汇总
2017/04/07 NodeJs
详解node.js平台下Express的session与cookie模块包的配置
2017/04/26 Javascript
JS开发中基本数据类型具体有哪几种
2017/10/19 Javascript
jquery应用实例分享_实现手风琴特效
2018/02/01 jQuery
ES6小技巧之代替lodash
2019/06/07 Javascript
详细分析Node.js 模块系统
2020/06/28 Javascript
[42:25]EG vs Spirit Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
Python 随机生成中文验证码的实例代码
2013/03/20 Python
Python开发如何在ubuntu 15.10 上配置vim
2016/01/25 Python
Python循环语句中else的用法总结
2016/09/11 Python
Python Queue模块详细介绍及实例
2016/12/27 Python
非递归的输出1-N的全排列实例(推荐)
2017/04/11 Python
几种实用的pythonic语法实例代码
2018/02/24 Python
Caffe均值文件mean.binaryproto转mean.npy的方法
2018/07/09 Python
pyqt5的QComboBox 使用模板的具体方法
2018/09/06 Python
英国Amara家居法国网站:家居装饰,现代装饰和豪华礼品
2016/12/15 全球购物
EJB timer的种类
2014/10/28 面试题
门前三包责任书
2014/04/15 职场文书
2016基督教会圣诞节开幕词
2016/03/04 职场文书
熟背这些句子,让您的英语口语突飞猛进(135句)
2019/09/06 职场文书
python scipy 稀疏矩阵的使用说明
2021/05/26 Python