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 nextSibling 与 getNextElement(node) 使用介绍
Oct 13 Javascript
jQuery.getScript加载同域JS的代码
Feb 13 Javascript
Jquery 获取指定标签的对象及属性的设置与移除
May 29 Javascript
js面向对象之公有、私有、静态属性和方法详解
Apr 17 Javascript
ionic在开发ios系统微信时键盘挡住输入框的解决方法(键盘弹出问题)
Sep 06 Javascript
微信小程序实战之仿android fragment可滑动底部导航栏(4)
Apr 16 Javascript
BootStrap Table 后台数据绑定、特殊列处理、排序功能
May 27 Javascript
基于jQuery Easyui实现登陆框界面
Jul 10 jQuery
vue实现tab切换外加样式切换方法
Mar 16 Javascript
微信小程序如何访问公众号文章
Jul 08 Javascript
Vue 设置axios请求格式为form-data的操作步骤
Oct 29 Javascript
JS端基于download.js实现图片、视频时直接下载而不是打开预览
May 09 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
discuz Passport 通行证 整合笔记
2008/06/30 PHP
基于php冒泡排序算法的深入理解
2013/06/09 PHP
ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
2014/05/15 PHP
jQuery(1.3.2) 7行代码搞定跟随屏幕滚动的层
2009/05/21 Javascript
javascript与cookie 的问题详解
2013/11/11 Javascript
jQuery获得页面元素的绝对/相对位置即绝对X,Y坐标
2014/03/06 Javascript
window.location 对象所包含的属性
2014/10/10 Javascript
在Node.js应用中读写Redis数据库的简单方法
2015/06/30 Javascript
javascript实现3D切换焦点图
2015/10/16 Javascript
使用JQuery实现Ctrl+Enter提交表单的方法
2015/10/22 Javascript
解决jQuery使用JSONP时产生的错误
2015/12/02 Javascript
使用jQuery+EasyUI实现CheckBoxTree的级联选中特效
2015/12/06 Javascript
jQuery实现图片滑动效果
2017/03/08 Javascript
Vue项目中使用Vux的安装过程
2018/05/01 Javascript
JS控制只能输入数字并且最多允许小数点两位
2019/11/24 Javascript
vscode 插件开发 + vue的操作方法
2020/06/05 Javascript
JS实现电脑虚拟键盘打字测试
2020/06/24 Javascript
js瀑布流布局的实现
2020/06/28 Javascript
在Python下进行UDP网络编程的教程
2015/04/29 Python
python使用super()出现错误解决办法
2017/08/14 Python
Python实现PS图像调整之对比度调整功能示例
2018/01/26 Python
python逆序打印各位数字的方法
2018/06/25 Python
python使用Plotly绘图工具绘制水平条形图
2020/03/25 Python
Python爬虫自动化爬取b站实时弹幕实例方法
2021/01/26 Python
CSS3的transition和animation的用法实例介绍
2014/08/20 HTML / CSS
函授本科自我鉴定
2014/02/04 职场文书
大学生职业生涯规划书汇总
2014/03/20 职场文书
办公室主任竞聘演讲稿
2014/05/15 职场文书
司机工作自我鉴定
2014/09/19 职场文书
2015年销售内勤工作总结
2015/04/27 职场文书
毕业典礼主持词
2015/06/29 职场文书
培训简讯范文
2015/07/20 职场文书
《陶罐和铁罐》教学反思
2016/03/03 职场文书
一文搞懂如何实现Go 超时控制
2021/03/30 Python
Python预测分词的实现
2021/06/18 Python
纯 CSS 自定义多行省略的问题(从原理到实现)
2021/11/11 HTML / CSS