JavaScript实现图片合成下载的示例


Posted in Javascript onNovember 19, 2020

最近项目一个功能需求,需实现将两张图片合成后下载的一个功能。分析完功能需求后,决定直接使用前端技术来实现。为提高效率,使用插件(html2canvas)配合编写此功能。有关插件(html2canvas)的介绍,这里不多说明,大家可自行网上查阅。以下直接附上效果演示图以及完整代码

效果演示:

JavaScript实现图片合成下载的示例

完整代码:(代码复制可直接使用)

注:最好将代码文件放在服务器环境下运行,以防止插件(html2canvas)出错,这里使用的服务器环境为phpStudy,为本地服务器环境。有关本地服务器有哪些以及下载使用,可自行网上查阅

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>JS实现图片合成下载</title> 
<script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js"></script> 
<script src="//apps.bdimg.com/libs/jqueryui/1.10.4/jquery-ui.min.js"></script><!--加载jquery ui主要作用是使用其拖拽的功能--> 
<script src="https://cdn.bootcss.com/html2canvas/0.5.0-beta4/html2canvas.min.js"></script><!--想要图片合成,核心就是加载使用这个插件--> 
<script> 
function BaseImage(imgFile) {//图片1上传的函数方法 
   var f = imgFile.files[0];//获取上传的图片文件 
   var filereader = new FileReader();//新建一个图片对象 
  filereader.onload = function (event) {//图片加载完成后执行的函数 
      var srcpath = event.target.result;//这里获取图片的路径(图片会被转为base6格式) 
      $("#baseimg").attr("src",srcpath);//将获取的图片使用jquery的attr()方法插入到id为baseimg的图片元素里 
   }; 
   filereader.readAsDataURL(f);//读取图片(将插入的图片读取显示出来) 
 } 
 
function StyleImage(imgFile) { //图片2上传的函数方法(原理同上) 
   var f = imgFile.files[0]; 
  var filereader = new FileReader(); 
   filereader.onload = function (event) { 
      var srcpath = event.target.result; 
      $("#styleimg").attr("src",srcpath); 
  }; 
    filereader.readAsDataURL(f); 
 }  
 
$(function() { 
    $( ".drg" ).draggable();//这里使用jquery ui的拖拽方法  draggable();作用是可以让图片2进行拖拽 
}); 
 
function down(){//这个函数是点击下载执行的方法 
   html2canvas($(".whole"),{ //这是使用了html2canvas这个插件的方法,将class为whole的整个节点绘制成画布 
     onrendered:function(canvas){  //画布绘制完成后执行下面内容,function内的canvas这个参数就是已经被绘制成画布 
          var link = document.createElement('a');//创建一个a标签 
          link.download = 'my-image-name.jpg';//a标签增加一个download属性,属性值(my-image-name.jpg)就是合成下载后的文件名 
          link.href = canvas.toDataURL();//canvas.toDataURL()就是画布的路径,将路径赋给a标签的href 
          link.click();//模拟a标签被点击,这样就可以下载了 
     }, 
  }) 
} 
</script> 
</head> 
<body> 
 
<fieldset> 
 <input type="file"  onchange="BaseImage(this)" > 
<legend>上传图1</legend> 
</fieldset> 
<fieldset> 
<input  type="file"  onchange="StyleImage(this)" > 
 <legend>上传图2</legend> 
</fieldset> 
<fieldset> 
 <button onclick="down()" >点击合成下载</button> 
</fieldset> 
 
<span class="whole" style="width: 544px;display: inline-block;position: relative;"> 
<img id="baseimg"  style="width:100%;height:auto;"  > 
<div style="height: 100%;width: 100%;top:0;position: absolute;overflow: hidden;"> 
<div class="drg" style="position: absolute;width:100px;top: 0px;left: 0px;display: inline-block;"> 
<img id="styleimg"  style="width:100%;cursor: pointer;" > 
</div> 
</div> 
</span> 
 
</body> 
</html>

以上就是JavaScript实现图片合成下载的示例的详细内容,更多关于JavaScript 图片合成下载的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
基于逻辑运算的简单权限系统(实现) JS 版
Mar 24 Javascript
List Information About the Binary Files Used by an Application
Jun 18 Javascript
判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解
Nov 07 Javascript
Node.js Streams文件读写操作详解
Jul 04 Javascript
JSON与XML的区别对比及案例应用
Nov 11 Javascript
JS实现图片上传预览功能
Nov 21 Javascript
jquery-mobile基础属性与用法详解
Nov 23 Javascript
js常用DOM方法详解
Feb 04 Javascript
微信小程序tabbar不显示解决办法
Jun 08 Javascript
vue.js中v-on:textInput无法执行事件问题的解决过程
Jul 12 Javascript
vue 导航内容设置选中状态样式的例子
Nov 01 Javascript
vue实现拖拽进度条
Mar 01 Vue.js
vue 获取到数据但却渲染不到页面上的解决方法
Nov 19 #Vue.js
vue 插槽简介及使用示例
Nov 19 #Vue.js
微信小程序实现点击导航条切换页面
Nov 19 #Javascript
详解Vue的mixin策略
Nov 19 #Vue.js
微信小程序自定义底部弹出框功能
Nov 18 #Javascript
微信小程序实现底部弹出框
Nov 18 #Javascript
微信小程序实现弹幕墙(祝福墙)
Nov 18 #Javascript
You might like
PHP实现今天是星期几的几种写法
2013/09/26 PHP
php发送post请求的三种方法
2014/02/11 PHP
PHP下的Oracle客户端扩展(OCI8)安装教程
2014/09/10 PHP
一个经典的PHP文件上传类分享
2014/11/18 PHP
WordPress中缩略图的使用以及相关技巧
2015/11/24 PHP
YII视图整合kindeditor扩展的方法
2016/07/13 PHP
javascript StringBuilder类实现
2008/12/22 Javascript
javaScript 关闭浏览器 (不弹出提示框)
2010/01/31 Javascript
javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
2011/04/12 Javascript
node在两个div之间移动,用ztree实现
2013/03/06 Javascript
jquery中load方法的用法及注意事项说明
2014/02/22 Javascript
JavaScript中的console.profile()函数详细介绍
2014/12/29 Javascript
jQuery实现网页抖动的菜单抖动效果
2015/08/07 Javascript
详解Document.Cookie
2015/12/25 Javascript
js实现select二级联动下拉菜单
2020/04/17 Javascript
jQuery Ajax Post 回调函数不执行问题的解决方法
2016/08/15 Javascript
JS判断是否手机或pad访问实现方法
2016/12/09 Javascript
d3.js实现立体柱图的方法详解
2017/04/28 Javascript
使用Require.js封装原生js轮播图的实现代码
2017/06/15 Javascript
详解@angular/cli 改变默认启动端口两种方式
2018/11/29 Javascript
使用vue引入maptalks地图及聚合效果的实现
2020/08/10 Javascript
[06:21]2014DOTA2国际邀请赛 庆祝VG首阶段领跑;B叔为挣牛排半夜整理情报
2014/07/13 DOTA
Python3实现简单可学习的手写体识别(实例讲解)
2017/10/21 Python
Window环境下Scrapy开发环境搭建
2018/11/18 Python
对Django项目中的ORM映射与模糊查询的使用详解
2019/07/18 Python
Python Numpy,mask图像的生成详解
2020/02/19 Python
在主流系统之上安装Pygame的方法
2020/05/20 Python
pycharm全局搜索的具体步骤
2020/07/28 Python
pycharm 添加解释器的方法步骤
2020/08/31 Python
美国在线鞋类零售商:LifeStride
2019/06/09 全球购物
Timberland德国官网:靴子、鞋子、衣服、夹克及配件
2019/12/10 全球购物
入党自我评价优缺点
2014/01/25 职场文书
生日宴会主持词
2014/03/20 职场文书
2015年除四害工作总结
2015/07/23 职场文书
《只有一个地球》教学反思
2016/02/16 职场文书
海康机器人重磅发布全新算法开发平台VM4.2
2022/04/21 数码科技