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 相关文章推荐
JavaScript 编程引入命名空间的方法
Jun 29 Javascript
从零开始学习jQuery (六) jquery中的AJAX使用
Feb 23 Javascript
在javascript中实现函数数组的方法
Dec 25 Javascript
jquery图片滚动放大代码分享(2)
Aug 28 Javascript
JS HTML图片显示Canvas 压缩功能
Jul 21 Javascript
node puppeteer(headless chrome)实现网站登录
May 09 Javascript
jQuery的Ajax接收java返回数据方法
Aug 11 jQuery
javascript实现计算指定范围内的质数示例
Dec 29 Javascript
基于javascript canvas实现五子棋游戏
Jul 08 Javascript
基于javascript原生判断DOM是否加载完毕
Oct 14 Javascript
vue组件中传值EventBus的使用及注意事项说明
Nov 16 Javascript
JavaScript 防盗链的原理以及破解方法
Dec 29 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
收音机史话 - 1960年代前后的DIY
2021/03/02 无线电
模拟OICQ的实现思路和核心程序(二)
2006/10/09 PHP
PHP小技巧之JS和CSS优化工具Minify的使用方法
2014/05/19 PHP
用php守护另一个php进程的例子
2015/02/13 PHP
PHP页面间传递值和保持值的方法
2016/08/24 PHP
php解析base64数据生成图片的方法
2016/12/06 PHP
总结PHP内存释放以及垃圾回收
2018/03/29 PHP
php生成HTML文件的类方法
2019/10/11 PHP
jquery 日期分离成年月日的代码
2010/05/14 Javascript
JS实现字体选色板实例代码
2013/11/20 Javascript
js使用removeChild方法动态删除div元素
2014/08/01 Javascript
jQuery实现点击表格单元格就可以编辑内容的方法【测试可用】
2016/08/01 Javascript
JavaScript使用正则表达式获取全部分组内容的方法示例
2017/01/17 Javascript
vue数据双向绑定的注意点
2017/06/23 Javascript
基于js中的原型(全面讲解)
2017/09/19 Javascript
vue.js动画中的js钩子函数的实现
2018/07/06 Javascript
解决vuejs项目里css引用背景图片不能显示的问题
2018/09/13 Javascript
深入理解Vue.js轻量高效的前端组件化方案
2018/12/10 Javascript
Angular请求防抖处理第一次请求失效问题
2019/05/17 Javascript
vue实现搜索过滤效果
2019/05/28 Javascript
JS运算符优先级与表达式示例详解
2020/09/04 Javascript
Javascript执行上下文顺序的深入讲解
2020/11/04 Javascript
js中实现继承的五种方法
2021/01/25 Javascript
[37:50]VP vs TNC Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
python快速建立超简单的web服务器的实现方法
2018/02/17 Python
pycharm如何实现跨目录调用文件
2020/02/28 Python
Pytorch 图像变换函数集合小结
2021/02/01 Python
手摸手教你用canvas实现给图片添加平铺水印的实现
2019/08/20 HTML / CSS
html5视频常用API接口的实战示例
2020/03/20 HTML / CSS
英国最大的手表网站:The Watch Hut
2017/03/31 全球购物
巴塞罗那观光通票:Barcelona Pass
2019/10/30 全球购物
大学生预备党员自我评价分享
2013/11/16 职场文书
初中同学聚会邀请函
2014/02/03 职场文书
体育专业自荐书
2014/05/29 职场文书
2016党风廉政建设心得体会范文
2016/01/25 职场文书
分析Python感知线程状态的解决方案之Event与信号量
2021/06/16 Python