浅谈简单实现file控件的图片预览,裁剪和上传。
1.图片预览之FileReader对象
FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用File或Blob对象指定要读取的文件或数据
普及一下Blob对象和File对象(Blob 对象表示一个不可变、原始数据的类文件对象,File对象是基其的扩展)
FileReader对象提供以下api
2和4 的区别在于一个返回读取结果是一个 ArrayBuffer 对象。后一个是读取结果是一个基于Base64编码的 data-uri 对象。
图片预览,很显然后者更合适。
readAsDataURL是异步的,写法类似new一个Image()对象。
贴上部分代码:
var reader = new FileReader();
reader.onload = (function (file) {
return function (event) {
var img='<img src="'+this.result+'" id="test">'
// 返回一个this.result 为base64编码的图片数据。创建一个img,push到页面上就可以查看。
}
};
})(event.target.files[0]);
reader.readAsDataURL(event.target.files[0]);
是不是很像 var img=new Image() img.onload=function(){};img.src=""。
2.图片裁剪,jcrop.js,canvas,
图片裁剪用了jcrop插件,该插件返回 所选区域的x,y坐标,拉选框的宽高,这四项是我们截图的依据。
截图我们用canvas截,
贴码
var img=document.getElementById("test"); //图片id
var canvas = document.getElementById("canvas"); // 画布对象,网上很多人用canvas画图不显示,需要写在img.onload事件内,其实不需要,是因为没有这个对象。
canvas.width = img.width;
canvas.height =img.height;
var ctx = canvas.getContext("2d");
ctx.drawImage(img,c.x,c.y,c.w,c.h,0,0,c.w,c.h); c为crop返回的相关参数。drawImage的参数如何使用可以查看3cschool。
var dataURL = canvas.toDataURL("image/png"); //我们得到一个返回一个包含图片展示的 data URI (base64描述的二进制流);
3.data URI转二进制流 1.将base64解码 atob()
2.创建一个8 位无符号整数值的类型化数组。内容将初始化为 0
3.逐一读取解码的值,用charCodeAt() 方法返回指定位置的字符的 Unicode 编码。
4.将其实例化为一个File对象或Blob对象,以供操作。
var arr = DataUrl.split(','),
mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]),
n = bstr.length,
u8arr = new Uint8Array(n);
while(n--){
u8arr[n] = bstr.charCodeAt(n);
}
return new File([u8arr], "XX.png", {type:"image/png"});
3.FormDate对象模拟表单提交。
FormData对象用以将数据编译成键值对,以便ajax来发送数据。
比起普通的ajax,使用FormData的最大优点就是我们可以异步上传一个二进制文件
formdata对象提供append方法往其内部插入键值对,包括插入file对象blob对象
var formData= new FormData();
formData.append("uploadFile",imgdata); 至此,我们成功的完成了图片的本地预览,裁剪和上传。
浅谈简单实现file控件的图片预览,裁剪和上传。的更多相关文章
- 浅谈WPF中对控件的位图特效(WPF Bitmap Effects)
原文:浅谈WPF中对控件的位图特效(WPF Bitmap Effects) -------------------------------------------------------------- ...
- File控件选择图片的时候在Html5下马上预览
页面HTML <div> <img src="@pic.Path" id="img" style="width:200px;heig ...
- 使用input:file控件在微信内置浏览器上传文件返回未显示选择的文件
使用input:file控件在微信内置浏览器上传文件返回未显示选择的文件 原来的写法: <input type="file" accept="image/x-png ...
- input file样式修改,图片预览删除功能
本篇对input file进行了修改,改成自己需要的样式,类似验证身份上传身份证图片的功能. 效果图如下: 这里主要展示上传预览图片功能,对于删除功能的html及css写的比较粗糙,对于想要精细表现这 ...
- 浅谈ASP.NET报表控件
OWC似乎使用者居多,但看见有网友在帖中抱怨OWC在使用时需要许可证书,于是将其排除,我可不想BOSS在看报表时弹出一个“没有许可证书”的窗口. 接着找到了ComponentOne的Web chart ...
- (转)浅谈ASP.NET报表控件
项目中有报表图形化的需求, 于是开始在网上找第三方chart控件.因时间紧迫,大至确定了几个候选:一.Office带的OWC控件:二.ComponentOne:三.Web Chart.本文将讲解ASP ...
- Js或 Activex 控件调用打印预览等操作
<input value="打印" type="button" onclick="javascript:window.print()" ...
- file控件选择图片,img即可显示(无需上传)
代码如下: <script> $(function() { $("#Book_Fiel").change(function() { var $file = $(this ...
- js控件实现修改预览的功能
http://nytimes.github.io/ice/demo/ https://johnresig.com/projects/javascript-diff-algorithm/
随机推荐
- Operator '?:' has lower precedence than '*'; '*' will be evaluated first
1.项目中用宏的时候,遇到如下警告 Operator '?:' has lower precedence than '*'; '*' will be evaluated first 2.错误原因 *操 ...
- macro `AM_PROG_LIBTOOL’ not found in library
https://blog.csdn.net/yongcai1/article/details/8693068 yum install libtool
- CAS机制是什么?有什么缺点,会出现什么问题
CAS是英文单词Compare And Swap的缩写,翻译过来就是比较并替换. CAS机制当中使用了3个基本操作数:内存地址V,旧的预期值A,要修改的新值B. CAS的缺点: 1.CPU开销较大 在 ...
- Echart中X轴数据过多时横向拉动展示
chart.setOption( { tooltip: { trigger: 'axis' }, toolbox: { feature: { saveAsImage: {} } }, grid: { ...
- CF755G PolandBall and Many Other Balls/soj 57送饮料
题意:长度为n的序列,相邻两个或单独一个可以划分到一个组,每个元素最多处于一个组. 问恰好分割成k(1<=k<=m)段有多少种方案? 标程: #include<bits/stdc++ ...
- JAVA Java中@Override的作用
@Override是伪代码,表示重写(当然不写也可以),不过写上有如下好处: 1.可以当注释用,方便阅读: 2.编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错.例 ...
- 【转】Git 修改已提交的commit注释
https://www.jianshu.com/p/098d85a58bf1 [重点] 通过git rebase -i HEAD~2 你想修改哪条注释 就把哪条注释前面的pick换成edit git ...
- Dart编程变量
变量是"存储器中的命名空间",用于存储值.换句话说,它作为程序中值的容器.变量名称称为标识符.以下是标识符的命名规则 - 标识符不能是关键字. 标识符可以包含字母和数字. 标识符不 ...
- (转)简单的RPC java实现 .
转:http://blog.csdn.net/jackliang55/article/details/7580563 我也承认,RPC的名声大噪之时是在2003年,那一个“冲击波”病毒(Blaster ...
- 2019 牛客多校第一场 A Equivalent Prefixes
题目链接:https://ac.nowcoder.com/acm/contest/881/A 题目大意 定义 RMQ(u, L, R) 为 u 数组在区间 [L, R] 上最小值的下标. 如果有 2 ...