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 ...
随机推荐
- ASP.NET MVC 5 入门指南汇总
经过前一段时间的翻译和编辑,我们陆续发出12篇ASP.NET MVC 5的入门文章.其中大部分翻译自ASP.NET MVC 5 官方教程,由于本系列文章言简意赅,篇幅适中,从一个web网站示例开始讲解 ...
- iOS开发系列—Objective-C之Foundation框架
概述 我们前面的章节中就一直新建Cocoa Class,那么Cocoa到底是什么,它和我们前面以及后面要讲的内容到底有什么关系呢?Objective-C开发中经常用到NSObject,那么这个对象到底 ...
- java中文乱码解决之道(五)-----java是如何编码解码的
在上篇博客中LZ阐述了java各个渠道转码的过程,阐述了java在运行过程中那些步骤在进行转码,在这些转码过程中如果一处出现问题就很有可能会产生乱码!下面LZ就讲述java在转码过程中是如何来进行编码 ...
- MySQL mysqldump数据导出详解
介绍 在日常维护工作当中经常会需要对数据进行导出操作,而mysqldump是导出数据过程中使用非常频繁的一个工具:它自带的功能参数非常多,文章中会列举出一些常用的操作,在文章末尾会将所有的参数详细说明 ...
- 干货!表达式树解析"框架"(1)
最新设计请移步 轻量级表达式树解析框架Faller http://www.cnblogs.com/blqw/p/Faller.html 关于我和表达式树 其实我也没有深入了解表达式树一些内在实现的原理 ...
- 【原】Telerik radwindow 在IE10下偶尔报 unable to get value of the property 'toLowerCase' 的解决办法
笔者正在开发的新项目在升级了最新版本的Telerik Control和决定支持IE10后,遇到了一个很棘手的问题,偶尔会在打开Radwindow的时候报JS error :unable to get ...
- 过年7天乐,学nodejs 也快乐
自从上次接触nodejs 已经好长时间了,但是年底公司太忙了 ,没时间看, 上次文章在ubuntu上安装nodejs[开启实时web时代] http://www.cnblogs.com/qqlovin ...
- js事件(event)的运行原理
昨天写click事件时候突然脑袋抽筋想了想浏览器是怎么执行click事件的,为什么我们可以用e或者window.event这个对象获取一些事件的属性呐?以下是我的理解.如果您有更好的理解,欢迎评论!! ...
- fir.im Weekly - 如何进行 Android App 性能优化
关于 Android App 的优化,@anly-jun 用 3 个月完成了这一系列文章,从 性能分析工具 到 ANR .Layout .消除卡顿 到 内存优化.内存分析工具大概十五六篇,并对此做一个 ...
- 元素绝对定位以后设置了高宽,a标签不能点击的原因总结
元素绝对定位以后设置了高宽,a标签不能点击的原因: 1.元素内并无内容 2.背景是透明的,无任何背景图或者颜色 解决方法: 1.如果不是绝对定位元素的,可以用相对定位 2.给元素加透明的背景图 3.I ...