html5 前端图片处理(预览、压缩、缩放)
现在手机图片是越来越大了,上传图片流量耗费巨大。同时预览也是一个问题,所以利用HTML5 file和canvas来解决这个问题。
var upload = {
_o: null,//对象id
_auto: true,//是否自动上传
_yl: false,//预览
_ylFun: null,//预览回调函数
_ys: ,//压缩 (1-100)100不压缩
_sf: ,//缩放(1-100)100不缩放
img: null,
mImg: null,
init: function (o, auto, yl, ylFun, ys, sf) {
this._o = o;
if (auto != undefined) this._auto = auto;
if (yl != undefined) this._yl = yl;
if (ylFun != undefined) this._ylFun = ylFun;
if (ys != undefined) this._ys = ys;
if (sf != undefined) this._sf = sf;
this.click();
},
click: function () {
var o = document.getElementById(this._o);
o.addEventListener('change', this.change, false);
},
change: function () {
var oFile = this.files[];
var FileInfo = {
name: oFile.name || oFile.fileName,
type: oFile.type || oFile.fileType,
size: oFile.size || oFile.fileSize,
modTime: oFile.lastModified,
blob: oFile
};
// Android下读不到type信息,从文件名中解析
if (!FileInfo.type) {
var ext = FileInfo.name.split(".").pop().toLowerCase();
if (ext == 'jpg') { sFileType = 'image/jpeg'; }
else { sFileType = 'image/' + ext;}
}
// 读取文件大小、修改时间等信息
var rFilter = /^(image\/jpeg|image\/png|image\/gif|image\/bmp)$/i;
if (!rFilter.test(FileInfo.type)) {
return;//非图片
}
var oImg = document.createElement('img');
// 使用FileReader读取
var oReader = new FileReader();
oReader.onload = function () {
var sBase64 = this.result;
// 部分Android下base64字符串格式不完整
if (window.gIsAndroid && sBase64.indexOf("data:image/") != ) {
sBase64 = sBase64.replace("base64,", FileInfo.type + ";base64,");
}
oImg.src = sBase64;
upload.img = oImg;
if (upload != ) {
upload.img = upload.compress(FileInfo.type);
}
if (upload._yl) {
upload._ylFun(upload.img);
}
sBase64 = null;
}
oReader.readAsDataURL(oFile);
},
compress: function (mime_type) {
var cvs = document.createElement('canvas');
//naturalWidth真实图片的宽度
var w = this.img.naturalWidth * this._sf / ;
var h = this.img.naturalHeight * this._sf / ;
cvs.width = w;
cvs.height = h;
var ctx = cvs.getContext("2d");
ctx.drawImage(this.img, , , w, h);
var newImageData = cvs.toDataURL(mime_type, this._ys / );
var result_image_obj = new Image();
result_image_obj.src = newImageData;
return result_image_obj;
}
};
html代码
<input type="file" id="upload" />
<script src="js/zepto.min.js"></script>
<script src="js/upload.js"></script>
<script type="text/javascript">
$(function () {
upload.init('upload', false, true, function (e) {
$('#upload).before(e);
},,);
});
</script>
html5 前端图片处理(预览、压缩、缩放)的更多相关文章
- 使用canvas实现图片预览、缩放(压缩)以及生成文件下载
参考 https://www.runoob.com/html/html5-canvas.html https://www.cnblogs.com/yuanzhiguo/p/8288822.html h ...
- 图片本地预览 flash html5
dataURI 一种能够在页面嵌入外部资源的URI方案.能够降低图片或者样式表的http请求数量,提高效率. ie8把dataURI 的属性值限制在32k以内. 图片本地预览: 由于安全原因,通过fi ...
- JS实现图片base64转blob对象,压缩图片,预览图片,图片旋转到正确角度
base64转blob对象 /** 将base64转换为文件对象 * @param {String} base64 base64字符串 * */ var convertBase64ToBlob = f ...
- javascript和HTML5上传图片之前实现预览效果
一:FileList对象与file对象 FileList对象表示用户选择的文件列表,在HTML4中,file控件内只允许放置一个文件,但是到了HTML5中,通过添加multiple属性,file控件内 ...
- node.js平台下,cropper.js实现图片裁剪预览并转换为base64发送至服务端。
一 .准备工作 1.首先需要先下载cropper,常规使用npm,进入项目路径后执行以下命令: npm install cropper 2. cropper基于jquery,在此不要忘记引入jq,同时 ...
- iOS HTML图片本地预览
引言 相信用过苹果手机的童鞋,会发现很多新闻类的应用,都可以实现HTML图片本地预览,那么这是如何实现的呢?本文将深入阐述其中的原理. 关于此功能,我还实现了一个DEMO,大家可以点击此访问更详细内容 ...
- cropper.js实现图片裁剪预览并转换为base64发送至服务端。
一 .准备工作 1.首先需要先下载cropper,常规使用npm,进入项目路径后执行以下命令: npm install cropper 2. cropper基于jquery,在此不要忘记引入jq,同时 ...
- 前端实现在线预览pdf、docx、xls、ppt等文件
思路:前台将各种格式的附件上传到服务器----后台通过方法将这些格式的文件转化成图片,前台通过放映ppt的方式将其展示在页面上. 关键点:reveal.js 参考文章:https://www.awes ...
- jQuery Lightbox图片放大预览
简介:jQuery Lightbox图片放大预览代码是一款可以在用户点击页面中的小图片时,将该图片的高清版本以Lightbox的方式放大显示在页面的中间,提高用户的体验度. 效果展示 http://h ...
- js实现FileUpload选择图片后预览功能
当asp.net的FileUpload选择一个图片后不需要上传就能显示出图片的预览功能, 代码: <%@ Page Language="C#" AutoEventWireup ...
随机推荐
- PostgreSQL 9.3发布
9月9日,PostgreSQL全球开发组宣布了9.3版发布的消息.从2010年9.0版开始,PostgreSQL已经连续四个版本稳定地按时在每年9月中旬发布,从一个侧面也显示了开发团队的强大实力. 9 ...
- RxJava 备注
RxJava是一个采用观察者模式的异步框架,本文给出几个基本的使用例子. 1.配置依赖: compile 'io.reactivex:rxjava:1.0.14' compile 'io.reacti ...
- Android 知识杂记(MVP模式)
MVP的模式在于将原来activity中业务逻辑的部分剥离出来,代码示例如下: Account public class Account { private String mUsername; pri ...
- 递归算法经典实例小结(C#实现)
一 .递归算法简介 在数学与计算机科学中,递归是指在函数的定义中使用函数自身的方法. 递归算法是一种直接或者间接地调用自身算法的过程.在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往 ...
- 企业IT管理员IE11升级指南【1】—— Internet Explorer 11增强保护模式 (EPM) 介绍
企业IT管理员IE11升级指南 系列: [1]—— Internet Explorer 11增强保护模式 (EPM) 介绍 [2]—— Internet Explorer 11 对Adobe Flas ...
- 如何理解T-SQL中Merge语句
写在前面的话:之前看过Merge语句,感觉没什么用,完全可以用其他的方式来替代,最近又看了看Merge语句,确实挺好用,可以少写很多代码,看起来也很紧凑,当然也有别的优点. ====正文开始===== ...
- 到底应该选择那种Linux.NET的部署方式?
当前部署Linux.NET环境的方式可谓是五花八门,既有传统的源码编译的方式.又有各式各样的一键安装脚本.还有绿色包安装方式,而随着Mono官方的新站上线,更增加了采用RPM包的部署方式.那对于一名L ...
- [译]AngularJS sercies - 获取后端数据
原文:ANGULARJS SERVICES – FETCHING SERVER DATA $http是AngularJS内置的服务,能帮助我们完成从服务端获数据.简单的用法就是在你需要数据的时候,发起 ...
- Tomcat调优及JMX监控
Tomcat调优及JMX监控 实验背景 ====================================================== 系统版本:CentOS release 6.5 ( ...
- SmtpClient发邮件时为什么用MailMessage.From而不用MailMessage.Sender
今天在看C#高级编程(第9版)的时候,在768页看到这样的一段代码 SmtpClient sc = new SmtpClient(); sc.Host = "邮箱服务器地址"; M ...