1.图片预览之FileReader对象

   FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用File或Blob对象指定要读取的文件或数据

普及一下Blob对象和File对象(Blob 对象表示一个不可变、原始数据的类文件对象,File对象是基其的扩展)

FileReader对象提供以下api

  1. abort()
  2. readAsArrayBuffer()
  3. readAsBinaryString()
  4. readAsDataURL()
  5. readAsText()

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控件的图片预览,裁剪和上传。的更多相关文章

  1. 浅谈WPF中对控件的位图特效(WPF Bitmap Effects)

    原文:浅谈WPF中对控件的位图特效(WPF Bitmap Effects) -------------------------------------------------------------- ...

  2. File控件选择图片的时候在Html5下马上预览

    页面HTML <div> <img src="@pic.Path" id="img" style="width:200px;heig ...

  3. 使用input:file控件在微信内置浏览器上传文件返回未显示选择的文件

    使用input:file控件在微信内置浏览器上传文件返回未显示选择的文件 原来的写法: <input type="file" accept="image/x-png ...

  4. input file样式修改,图片预览删除功能

    本篇对input file进行了修改,改成自己需要的样式,类似验证身份上传身份证图片的功能. 效果图如下: 这里主要展示上传预览图片功能,对于删除功能的html及css写的比较粗糙,对于想要精细表现这 ...

  5. 浅谈ASP.NET报表控件

    OWC似乎使用者居多,但看见有网友在帖中抱怨OWC在使用时需要许可证书,于是将其排除,我可不想BOSS在看报表时弹出一个“没有许可证书”的窗口. 接着找到了ComponentOne的Web chart ...

  6. (转)浅谈ASP.NET报表控件

    项目中有报表图形化的需求, 于是开始在网上找第三方chart控件.因时间紧迫,大至确定了几个候选:一.Office带的OWC控件:二.ComponentOne:三.Web Chart.本文将讲解ASP ...

  7. Js或 Activex 控件调用打印预览等操作

    <input value="打印" type="button" onclick="javascript:window.print()" ...

  8. file控件选择图片,img即可显示(无需上传)

    代码如下: <script> $(function() { $("#Book_Fiel").change(function() { var $file = $(this ...

  9. js控件实现修改预览的功能

    http://nytimes.github.io/ice/demo/ https://johnresig.com/projects/javascript-diff-algorithm/

随机推荐

  1. 安装Hama的基本过程

  2. md详解和rd详解:一次性创建多个目录和多级子目录

    md 命令: 官方解释: E:\ABC>md /? 创建目录. MKDIR [drive:]path MD [drive:]path 如果命令扩展被启用,MKDIR 会如下改变: 如果需要,MK ...

  3. 使用自己的Python函数处理Protobuf中的字符串编码

    我目前所在的项目是一个老项目,里面的字符串编码有点乱,数据库中有些是GB2312,有些是UTF8:代码中有些是GBK,有些是UTF8,代码中转来转去,经常是不太清楚当前这个字符串是什么编码,由于是老项 ...

  4. Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实 现)interface(接口

    匿名的内部类是没有名字的内部类.不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现

  5. Tools: java安装指南

    参考: https://www.cnblogs.com/smyhvae/p/3788534.htmljava安装 (1)新建->变量名"JAVA_HOME",变量值" ...

  6. idea 在新建一个class的时候可以选择继承的父类

    1.把光标放在父类名称上按alt+enter可以生成子类 2. 选中implement abstract class

  7. Spring - @ManagedResource, @ManagedOperation, @ManagedAttribute

    总结 通过annotation (@ManagedResource, @ManagedOperation, @ManagedAttribute)注解注册MBean到JMX实现监控java运行状态 参考 ...

  8. Perl 循环

    Perl 循环 有的时候,我们可能需要多次执行同一块代码.一般情况下,语句是按顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推. 编程语言提供了更为复杂执行路径的多种控制结构. 循环语 ...

  9. win7+vs2010配置驱动开发环境(问题种种版...)

     本来按照这个来做,能跑通helloworld,可是复杂的驱动就会出错....不知道什么原因,后来就直接用命令行来编译的. -------------------------------------- ...

  10. 直接用编译器按ctrl+F5运行和双击运行结果不一样

    是因为进程权限的问题,需要添加下面的代码: BOOL EnableDebugPrivilege() { HANDLE hToken; BOOL fOk=FALSE; if(OpenProcessTok ...