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 相关文章推荐
firefox 和 ie 事件处理的细节,研究,再研究 书写同时兼容ie和ff的事件处理代码
Apr 12 Javascript
javascript ie6兼容position:fixed实现思路
Apr 01 Javascript
JavaScript中字符串分割函数split用法实例
Apr 07 Javascript
基于jQuery1.9版本如何判断浏览器版本类型
Jan 12 Javascript
Bootstrap select多选下拉框实现代码
Dec 23 Javascript
详解JS: reduce方法实现 webpack多文件入口
Feb 14 Javascript
jQuery插件imgAreaSelect基础讲解
May 26 jQuery
BootStrap Fileinput上传插件使用实例代码
Jul 28 Javascript
element-ui 时间选择器限制范围的实现(随动)
Jan 09 Javascript
node-red File读取好保存实例讲解
Sep 11 Javascript
jQuery+css实现的点击图片放大缩小预览功能示例【图片预览 查看大图】
May 29 jQuery
Javascript var变量删除原理及实现
Aug 26 Javascript
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字符串中的单引号为双引号的方法
2017/02/16 PHP
php读取本地json文件的实例
2018/03/07 PHP
CodeIgniter框架数据库基本操作示例
2018/05/24 PHP
JavaScript格式化数字的函数代码
2010/11/30 Javascript
15款优秀的jQuery导航菜单插件分享
2011/07/19 Javascript
一行代码实现纯数据json对象的深度克隆实现思路
2013/01/09 Javascript
JavaScript获取onclick、onchange等事件值的代码
2013/07/22 Javascript
JavaScript字符串对象的concat方法实例(用于连接两个或多个字符串)
2014/10/16 Javascript
jQuery oLoader实现的加载图片和页面效果
2015/03/14 Javascript
用Move.js配合创建CSS3动画的入门指引
2015/07/22 Javascript
AngularJS中过滤器的使用与自定义实例代码
2016/09/17 Javascript
微信小程序-拍照或选择图片并上传文件
2017/01/06 Javascript
Angular 4依赖注入学习教程之简介(一)
2017/06/04 Javascript
详解微信第三方小程序代开发
2017/06/23 Javascript
详解如何在vue项目中使用eslint+prettier格式化代码
2018/11/10 Javascript
深入理解Vue.js轻量高效的前端组件化方案
2018/12/10 Javascript
vue中组件的3种使用方式详解
2019/03/23 Javascript
vue 进阶之实现父子组件间的传值
2019/04/26 Javascript
在mpvue框架中使用Vant WeappUI组件库的注意事项【推进】
2019/06/09 Javascript
如何解决js函数防抖、节流出现的问题
2019/06/17 Javascript
JS XMLHttpRequest原理与使用方法深入详解
2020/04/30 Javascript
vue+vant实现购物车全选和反选功能
2020/11/17 Vue.js
跟老齐学Python之有点简约的元组
2014/09/24 Python
Python爬取数据并写入MySQL数据库的实例
2018/06/21 Python
python矩阵的转置和逆转实例
2018/12/12 Python
django模板结构优化的方法
2019/02/28 Python
提升Python效率之使用循环机制代替递归函数
2019/07/23 Python
Python 序列化和反序列化库 MarshMallow 的用法实例代码
2020/02/25 Python
Python 给下载文件显示进度条和下载时间的实现
2020/04/02 Python
从Pytorch模型pth文件中读取参数成numpy矩阵的操作
2021/03/04 Python
麦德龙官方海外旗舰店:德国麦德龙超市
2017/12/23 全球购物
客户服务经理岗位职责
2014/01/29 职场文书
电子专业自荐信
2014/07/01 职场文书
司机岗位职责范本
2015/04/10 职场文书
Java中多线程下载图片并压缩能提高效率吗
2021/07/01 Java/Android
最新最全的手机号验证正则表达式
2022/02/24 Javascript