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 相关文章推荐
如何从jQuery的ajax请求中删除X-Requested-With
Dec 11 Javascript
纯JS实现动态时间显示代码
Feb 08 Javascript
随鼠标移动的时钟非常漂亮遗憾的是只支持IE
Aug 12 Javascript
javascript框架设计读书笔记之数组的扩展与修复
Dec 02 Javascript
js实现完美兼容各大浏览器的人民币大小写相互转换
Oct 29 Javascript
seajs模块之间依赖的加载以及模块的执行
Oct 21 Javascript
JS自定义滚动条效果简单实现代码
Oct 27 Javascript
VueAwesomeSwiper在VUE中的使用以及遇到的一些问题
Jan 11 Javascript
vue项目创建并引入饿了么elementUI组件的步骤
Apr 11 Javascript
vue+elementUi 实现密码显示/隐藏+小图标变化功能
Jan 18 Javascript
Vue Router的手写实现方法实现
Mar 02 Javascript
vue实现用户长时间不操作自动退出登录功能的实现代码
Jul 23 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
虫族 Zerg 热键控制
2020/03/14 星际争霸
PHP学习笔记 用户注册模块用户类以及验证码类
2011/09/20 PHP
Javascript学习笔记之 对象篇(四) : for in 循环
2014/06/24 Javascript
JavaScript实现选择框按比例拖拉缩放的方法
2015/08/04 Javascript
Mongoose学习全面理解(推荐)
2017/01/21 Javascript
nodeJS实现简单网页爬虫功能的实例(分享)
2017/06/08 NodeJs
JavaScript实现三级级联特效
2017/11/05 Javascript
详解使用vue-cli脚手架初始化Vue项目下的项目结构
2018/03/08 Javascript
npm 下载指定版本的组件方法
2018/05/17 Javascript
vue1.0和vue2.0的watch监听事件写法详解
2018/09/11 Javascript
搭建基于express框架运行环境的方法步骤
2018/11/15 Javascript
详解Angular Forms中自定义ngModel绑定值的方式
2018/12/10 Javascript
JavaScript 判断iPhone X Series机型的方法
2019/01/28 Javascript
Python中逗号的三种作用实例分析
2015/06/08 Python
Python实现的简单hangman游戏实例
2015/06/28 Python
浅谈Python的文件类型
2016/05/30 Python
对python For 循环的三种遍历方式解析
2019/02/01 Python
python中的global关键字的使用方法
2019/08/20 Python
python编写猜数字小游戏
2019/10/06 Python
在spyder IPython console中,运行代码加入参数的实例
2020/04/20 Python
Python 实现敏感目录扫描的示例代码
2020/05/21 Python
Python环境使用OpenCV检测人脸实现教程
2020/10/19 Python
jupyter 添加不同内核的操作
2021/02/06 Python
CSS3的calc()做响应模式布局的实现方法
2017/09/06 HTML / CSS
HTML5混合开发二维码扫描以及调用本地摄像头
2017/12/27 HTML / CSS
施华洛世奇加拿大官网:SWAROVSKI加拿大
2018/06/03 全球购物
大学自我鉴定范文
2013/12/26 职场文书
《冬阳童年骆驼队》教学反思
2014/04/15 职场文书
企业标语口号
2014/06/10 职场文书
另类冲刺标语
2014/06/24 职场文书
国贸专业求职信
2014/06/28 职场文书
员工自我评价范文
2015/03/11 职场文书
企业工会工作总结2015
2015/05/13 职场文书
python 进阶学习之python装饰器小结
2021/09/04 Python
图片批量处理 - 尺寸、格式、水印等
2022/03/07 杂记
在Python 中将类对象序列化为JSON
2022/04/06 Python