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简单的拖动效果实现原理及示例
Jul 26 Javascript
javascript ready和load事件的区别示例介绍
Aug 30 Javascript
关于javascript event flow 的一个bug详解
Sep 17 Javascript
jQuery中is()方法用法实例
Jan 06 Javascript
JavaScript编程的单例设计模讲解
Nov 10 Javascript
Bootstrap的modal拖动效果
Dec 25 Javascript
js实现产品缩略图效果
Mar 10 Javascript
Javascript es7中比较实用的两个方法示例
Jul 21 Javascript
微信小程序实现自定义modal弹窗封装的方法
Jun 15 Javascript
axios如何利用promise无痛刷新token的实现方法
Aug 27 Javascript
Nuxt.js nuxt-link与router-link的区别说明
Nov 06 Javascript
在vue中使用eslint,配合vscode的操作
Nov 09 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 快速生成 Flash 动画的方法
2007/03/06 PHP
PHP也能干大事 随机函数
2015/04/14 PHP
php获得文件夹下所有文件的递归算法的简单实例
2016/11/01 PHP
PHP实现ASCII码与字符串相互转换的方法
2017/04/29 PHP
escape、encodeURI、encodeURIComponent等方法的区别比较
2006/12/27 Javascript
jquery 图片 上一张 下一张 链接效果(续篇)
2010/04/20 Javascript
将json当数据库一样操作的javascript lib
2013/10/28 Javascript
js对图片base64编码字符串进行解码并输出图像示例
2014/03/17 Javascript
javascript显示中文日期的方法
2015/06/18 Javascript
js获取当前时间(昨天、今天、明天)
2016/11/23 Javascript
bootstrapValidator.min.js表单验证插件
2017/02/09 Javascript
bootstrap中模态框、模态框的属性实例详解
2017/02/17 Javascript
详解Vue 非父子组件通信方法(非Vuex)
2017/05/24 Javascript
VueJS事件处理器v-on的使用方法
2017/09/27 Javascript
详解Angular如何正确的操作DOM
2018/07/06 Javascript
基于JS实现web端录音与播放功能
2019/04/17 Javascript
vue开发移动端底部导航条功能
2020/04/08 Javascript
使用Vue Composition API写出清晰、可扩展的表单实现
2020/06/10 Javascript
在Python下利用OpenCV来旋转图像的教程
2015/04/16 Python
Python实现比较两个文件夹中代码变化的方法
2015/07/10 Python
python爬虫获取淘宝天猫商品详细参数
2020/06/23 Python
解决nohup重定向python输出到文件不成功的问题
2018/05/11 Python
Python学习笔记之集合的概念和简单使用示例
2019/08/22 Python
Python如何在DataFrame增加数值
2020/02/14 Python
python如何提升爬虫效率
2020/09/27 Python
python给list排序的简单方法
2020/12/10 Python
css3 box-sizing属性使用参考指南
2013/01/08 HTML / CSS
深入解析HTML5 Canvas控制图形矩阵变换的方法
2016/03/24 HTML / CSS
护理专科毕业自荐信范文
2014/04/21 职场文书
党建工作先进材料
2014/05/02 职场文书
春季防火方案
2014/05/10 职场文书
新闻发布会策划方案
2014/06/12 职场文书
php 防护xss,PHP的防御XSS注入的终极解决方案
2021/04/01 PHP
MySQL 数据类型选择原则
2021/05/27 MySQL
基于Redis6.2.6版本部署Redis Cluster集群的问题
2022/04/01 Redis
nginx 配置指令之location使用详解
2022/05/25 Servers