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 相关文章推荐
新发现一个骗链接的方法(js读取cookies)
Jan 11 Javascript
在JavaScript并非所有的一切都是对象
Apr 11 Javascript
Js保留小数点的4种效果实现代码分享
Apr 12 Javascript
兼容最新firefox、chrome和IE的javascript图片预览实现代码
Aug 08 Javascript
javascript记录文本框内文字个数检测文字个数变化
Oct 14 Javascript
jQuery事件的绑定、触发、及监听方法简单说明
May 10 Javascript
javascript 中的事件委托详解
Oct 25 Javascript
漂亮实用的页面loading(加载)封装代码
Feb 03 Javascript
Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
Dec 27 Javascript
layui点击导航栏刷新tab页的示例代码
Aug 14 Javascript
Vue.js实现立体计算器
Feb 22 Javascript
vue使用Google Recaptcha验证的实现示例
Aug 23 Vue.js
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
VFP与其他应用程序的集成
2006/10/09 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
2018/02/07 PHP
Phpstorm+Xdebug断点调试PHP的方法
2018/05/14 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
Aster vs KG BO3 第三场2.19
2021/03/10 DOTA
jquery动态加载js/css文件方法(自写小函数)
2014/10/11 Javascript
javascript面向对象之对象的深入理解
2015/01/13 Javascript
jQuery中hover方法和toggle方法使用指南
2015/02/27 Javascript
jquery validate demo 基础
2015/10/29 Javascript
使用原生的javascript来实现轮播图
2017/02/24 Javascript
nodejs搭建本地服务器并访问文件的方法
2017/03/03 NodeJs
基于vue开发的在线付费课程应用过程
2018/01/25 Javascript
vue下canvas裁剪图片实例讲解
2020/04/16 Javascript
js实现限定区域范围拖拉拽效果
2020/11/20 Javascript
[36:16]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.19
2020/12/24 DOTA
python通过socket查询whois的方法
2015/07/18 Python
python实现的多线程端口扫描功能示例
2017/01/21 Python
Python编程实现生成特定范围内不重复多个随机数的2种方法
2017/04/14 Python
Python3实现转换Image图片格式
2018/06/21 Python
对Django项目中的ORM映射与模糊查询的使用详解
2019/07/18 Python
python global关键字的用法详解
2019/09/05 Python
python实现的按要求生成手机号功能示例
2019/10/08 Python
如何基于python实现画不同品种的樱花树
2020/01/03 Python
使用spring mvc+localResizeIMG实现HTML5端图片压缩上传的功能
2016/12/16 HTML / CSS
英国Zoro工具:手动工具,电动工具和个人防护用品
2016/11/02 全球购物
IdealFit官方网站:女性蛋白质、补充剂和运动服装
2019/03/24 全球购物
英国在线定制百叶窗网站:Swift Direct Blinds
2020/02/25 全球购物
Java的接口和C++的虚类的相同和不同处
2014/03/27 面试题
制衣厂各岗位职责
2013/12/02 职场文书
护林防火标语
2014/06/27 职场文书
检察院院长群众路线教育实践活动个人整改措施
2014/10/04 职场文书
服务整改报告
2014/11/06 职场文书
中学团支部工作总结
2015/08/13 职场文书
《活见鬼》教学反思
2016/02/24 职场文书
Vue3中的Refs和Ref详情
2021/11/11 Vue.js
详解NumPy中的线性关系与数据修剪压缩
2022/05/25 Python