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 ...
随机推荐
- 玩转JavaScript OOP[4]——实现继承的12种套路
概述 在之前的文章中,我们借助构造函数实现了"类",然后结合原型对象实现了"继承",并了解了JavaScript中原型链的概念. 理解这些内容,有助于我们更深入 ...
- 分享基于Entity Framework的Repository模式设计(附源码)
关于Repository模式,在这篇文章中有介绍,Entity Framework返回IEnumerable还是IQueryable? 这篇文章介绍的是使用Entity Framework实现的Rep ...
- QParserGenerator的文法文件介绍
在沉默了数月之后,博主心血来潮想继续介绍QParserGenerator,在这里我们将不再继续介绍任何有关于LALR(1)的算法(那东西只会把你的脑子变成一团浆糊),让我们来看一下QParserGen ...
- Golang与C#之switch区别
Golang与C#之switch区别 Go是Google开发的一种编译型,可并行化,并具有垃圾回收功能的编程语言. C#是微软公司发布的一种面向对象的.运行于.NET Framework之上的高级程序 ...
- [CORS:跨域资源共享] 同源策略与JSONP
Web API普遍采用面向资源的REST架构,将浏览器最终执行上下文的JavaScript应用Web API消费者的重要组成部分."同源策略"限制了JavaScript的跨站点调用 ...
- 关于CefSharp的坎坷之路
项目背景: 公司的XX产品需要升级和以后支持多平台的使用.因为之前项目是由WPF实现的.目前以后想作为Html5来展示页面. 因为涉及到整体更改遇到的问题较多以及其他原因,所以只是内部内容区域先替换为 ...
- C#事件
事件(event),这个词儿对于初学者来说,往往总是显得有些神秘,不易弄懂.而这些东西却往往又是编程中常用且非常重要的东西.大家都知道windows消息处理机制的重要,其实C#事件就是基于window ...
- volatile用法
1.volatile 主要是 其 "可见性",在java内存模型中,变量都是放在主内存中,每条线程里面有自己的工作内存,当一个变量被volatile 修饰时候,其他的线程会得到该变 ...
- JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式
相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...
- Spill data to tempdb
查看Execution Plan时,在Sort Operator上,发现一个Warning:Operator used tempdb to spill data during execution wi ...