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 相关文章推荐
Javascript 兼容firefox的一些问题
May 21 Javascript
CutePsWheel javascript libary 控制输入文本框为可使用滚轮控制的js库
Feb 07 Javascript
jQuery EasyUI API 中文文档 - Dialog对话框
Nov 15 Javascript
js实现一个省市区三级联动选择框代码分享
Mar 06 Javascript
多种方式实现JS调用后台方法进行数据交互
Aug 20 Javascript
js+css实现导航效果实例
Feb 10 Javascript
ECMAScript6中Set/WeakSet详解
Jun 12 Javascript
微信小程序中使用自定义图标(阿里icon)的方法
Aug 20 Javascript
jQuery实现的卷帘门滑入滑出效果【案例】
Feb 18 jQuery
学习LayUI时自研的表单参数校验框架案例分析
Jul 29 Javascript
详解js location.href和window.open的几种用法和区别
Dec 02 Javascript
JS中FormData类实现文件上传
Mar 27 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
新52大事件
2020/03/03 欧美动漫
PHP Cookie的使用教程详解
2013/06/03 PHP
JS异常处理try..catch语句的作用和实例
2014/05/05 PHP
PHP ignore_user_abort函数详细介绍和使用实例
2014/07/15 PHP
php和asp语法上的区别总结
2019/05/12 PHP
jquery1.4 教程二 ajax方法的改进
2010/02/25 Javascript
JQury slideToggle闪烁问题及解决办法
2011/07/05 Javascript
如何将一个String和多个String值进行比较思路分析
2013/04/22 Javascript
仿新浪微博登陆邮箱提示效果的js代码
2013/08/02 Javascript
jQuery中parentsUntil()方法用法实例
2015/01/07 Javascript
全面解析Bootstrap表单使用方法(表单控件)
2015/11/24 Javascript
JavaScript基本语法学习教程
2016/01/14 Javascript
图片上传之FileAPI与NodeJs
2017/01/24 NodeJs
jQuery中map函数的两种方式
2017/04/07 jQuery
JavaScript中使用Async实现异步控制
2017/08/15 Javascript
vue.js 双层嵌套for遍历的方法详解, 类似php foreach()
2018/09/07 Javascript
如何自动化部署项目?折腾服务器之旅~
2019/04/16 Javascript
Javascript实现html转pdf高清版(提高分辨率)
2020/02/19 Javascript
[51:17]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
[01:10]DOTA2英雄背景故事第四期之混沌法则混沌骑士
2020/07/16 DOTA
Python中的高级数据结构详解
2015/03/27 Python
matplotlib调整子图间距,调整整体空白的方法
2018/08/03 Python
Tesserocr库的正确安装方式
2018/10/19 Python
python3+PyQt5 数据库编程--增删改实例
2019/06/17 Python
Python调用graphviz绘制结构化图形网络示例
2019/11/22 Python
Python unittest框架操作实例解析
2020/04/13 Python
AmazeUI 缩略图的实现示例
2020/08/18 HTML / CSS
全球知名鞋履品牌授权零售商:Journeys
2016/09/17 全球购物
维氏瑞士军刀英国网站:Victorinox英国
2019/07/04 全球购物
机关工会开展学习雷锋活动总结
2014/03/01 职场文书
体育教师求职信
2014/05/24 职场文书
世界遗产的导游词
2015/02/13 职场文书
《妈妈别哭,有我在》读后感3篇
2020/01/13 职场文书
python基于turtle绘制几何图形
2021/06/15 Python
MongoDB使用场景总结
2022/02/24 MongoDB
十大最强格斗系宝可梦,超梦X仅排第十,第二最重格斗礼仪
2022/03/18 日漫