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 相关文章推荐
IE JS编程需注意的内存释放问题
Jun 23 Javascript
JS维吉尼亚密码算法实现代码
Nov 09 Javascript
初识JQuery 实例一(first)
Mar 16 Javascript
js 中{},[]中括号,大括号使用详解
May 12 Javascript
分享一个用Mootools写的鼠标滑过进度条改变进度值的实现代码
Dec 12 Javascript
html文件中jquery与velocity变量中的$冲突的解决方法
Nov 01 Javascript
获取select元素被选中的文本内容的js代码
Jan 29 Javascript
JS实现定时自动关闭DIV层提示框的方法
May 11 Javascript
javascript获取本机操作系统类型的方法
Aug 13 Javascript
jquery实现可点击伸缩与展开的菜单效果代码
Aug 31 Javascript
webpack优化的深入理解
Dec 10 Javascript
浅谈layui数据表格判断问题(加入表单元素),设置单元格样式
Oct 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
在IIS7.0下面配置PHP 5.3.2运行环境的方法
2010/04/13 PHP
php 日期和时间的处理-郑阿奇(续)
2011/07/04 PHP
一个漂亮的php验证码类(分享)
2013/08/06 PHP
PHP中spl_autoload_register()和__autoload()区别分析
2014/05/10 PHP
php blowfish加密解密算法
2016/07/02 PHP
JS实现至少包含字母、大小写数字、字符的密码等级的两种方法
2015/02/03 Javascript
JavaScript 性能优化小结
2015/10/12 Javascript
JQuery实现简单的服务器轮询效果实例
2016/03/31 Javascript
基于jQuery实现音乐播放试听列表
2016/04/14 Javascript
JavaScript中创建对象的模式汇总
2016/04/19 Javascript
javascript获取指定区间范围随机数的方法
2017/09/08 Javascript
JavaScript实现的仿新浪微博原生态输入字数即时检查功能【兼容IE6】
2017/09/26 Javascript
详解使用vuex进行菜单管理
2017/12/21 Javascript
浅谈VUE监听窗口变化事件的问题
2018/02/24 Javascript
vue中使用sessionStorage记住密码功能
2018/07/24 Javascript
Vue中Axios从远程/后台读取数据
2019/01/21 Javascript
django js 实现表格动态标序号的实例代码
2019/07/12 Javascript
vue选项卡切换登录方式小案例
2019/09/27 Javascript
ES6 Object.assign()的用法及其使用
2020/01/18 Javascript
[01:12](回顾)DOTA2国际邀请赛,全世界DOTAer的盛宴
2014/07/01 DOTA
python实现向微信用户发送每日一句 python实现微信聊天机器人
2019/03/27 Python
django框架forms组件用法实例详解
2019/12/10 Python
详解用Pytest+Allure生成漂亮的HTML图形化测试报告
2020/03/31 Python
Django之全局使用request.user.username的实例详解
2020/05/14 Python
pyecharts在数据可视化中的应用详解
2020/06/08 Python
CSS3实现大小不一的粒子旋转加载动画
2016/04/21 HTML / CSS
TUMI澳大利亚网站:美国旅行箱包品牌
2017/03/27 全球购物
购买一个高级域名:BuyDomains
2018/03/11 全球购物
大学自我鉴定
2013/12/20 职场文书
工地门卫岗位职责
2013/12/30 职场文书
2014年自我评价
2014/01/04 职场文书
2014年乡镇民政工作总结
2014/12/02 职场文书
2015年防汛工作总结
2015/05/15 职场文书
法院执行局工作总结
2015/08/11 职场文书
《黄山奇石》教学反思
2016/02/18 职场文书
MySQL 使用事件(Events)完成计划任务
2021/05/24 MySQL