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下:nth-child(an+b)的使用注意
May 28 Javascript
js实现鼠标拖动图片并兼容IE/FF火狐/谷歌等主流浏览器
Jun 06 Javascript
jQuery中innerWidth()方法用法实例
Jan 19 Javascript
js实现密码强度检测【附示例】
Mar 30 Javascript
全面解析JavaScript中“&amp;&amp;”和“||”操作符(总结篇)
Jul 18 Javascript
JS上传图片预览插件制作(兼容到IE6)
Aug 07 Javascript
禁用backspace网页回退功能的实现代码
Nov 15 Javascript
原生js编写2048小游戏
Mar 17 Javascript
详解React native全局变量的使用(跨组件的通信)
Sep 07 Javascript
angularJS自定义directive之带参方法传递详解
Oct 09 Javascript
javascrit中undefined和null的区别详解
Apr 07 Javascript
详解JavaScript的内存空间、赋值和深浅拷贝
Apr 17 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 通过Socket收发十六进制数据的实现代码
2013/08/16 PHP
php 创建以UNIX时间戳命名的文件夹(示例代码)
2014/03/08 PHP
非常实用的php验证码类
2016/05/15 PHP
PHP实现添加购物车功能
2017/03/06 PHP
Laravel推荐使用的十个辅助函数
2019/05/10 PHP
select 控制网页内容隐藏于显示的实现代码
2010/05/25 Javascript
读jQuery之四(优雅的迭代)
2011/06/20 Javascript
javascript中的缓动效果实现程序
2012/12/29 Javascript
Javascript Ajax异步读取RSS文档具体实现
2013/12/12 Javascript
jQuery性能优化技巧分析
2015/02/20 Javascript
Underscore.js常用方法总结
2015/02/28 Javascript
JavaScript面向对象程序设计教程
2016/03/29 Javascript
javascript对象的相关操作小结
2016/05/16 Javascript
JS与Ajax Get和Post在使用上的区别实例详解
2016/06/08 Javascript
基于jQuery实现表格内容的筛选功能
2016/08/21 Javascript
js简单获取表单中单选按钮值的方法
2016/08/23 Javascript
bootstrap模态框跳转到当前模板页面 框消失了而背景存在问题的解决方法
2020/11/30 Javascript
详解基于vue-cli配置移动端自适应
2018/01/13 Javascript
详解Vue开发微信H5微信分享签名失败问题解决方案
2018/08/09 Javascript
python测试驱动开发实例
2014/10/08 Python
理论讲解python多进程并发编程
2018/02/09 Python
python爬虫之自动登录与验证码识别
2020/06/15 Python
python三方库之requests的快速上手
2019/03/04 Python
python登录WeChat 实现自动回复实例详解
2019/05/28 Python
Python日志打印里logging.getLogger源码分析详解
2021/01/17 Python
Spotahome意大利:公寓和房间出租
2020/02/21 全球购物
波兰汽车配件网上商店:iParts.pl
2020/09/08 全球购物
党校培训自我鉴定
2014/02/01 职场文书
化妆师职业生涯规划书
2014/02/16 职场文书
医院节能减排方案
2014/06/13 职场文书
商业企业管理专业求职信
2014/07/10 职场文书
免职证明样本
2014/10/23 职场文书
廉洁自律心得体会2016
2016/01/13 职场文书
goland 清除所有的默认设置操作
2021/04/28 Golang
windows安装python超详细图文教程
2021/05/21 Python
MySQL子查询中order by不生效问题的解决方法
2021/08/02 MySQL