现在手机图片是越来越大了,上传图片流量耗费巨大。同时预览也是一个问题,所以利用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 前端图片处理(预览、压缩、缩放)的更多相关文章

  1. 使用canvas实现图片预览、缩放(压缩)以及生成文件下载

    参考 https://www.runoob.com/html/html5-canvas.html https://www.cnblogs.com/yuanzhiguo/p/8288822.html h ...

  2. 图片本地预览 flash html5

    dataURI 一种能够在页面嵌入外部资源的URI方案.能够降低图片或者样式表的http请求数量,提高效率. ie8把dataURI 的属性值限制在32k以内. 图片本地预览: 由于安全原因,通过fi ...

  3. JS实现图片base64转blob对象,压缩图片,预览图片,图片旋转到正确角度

    base64转blob对象 /** 将base64转换为文件对象 * @param {String} base64 base64字符串 * */ var convertBase64ToBlob = f ...

  4. javascript和HTML5上传图片之前实现预览效果

    一:FileList对象与file对象 FileList对象表示用户选择的文件列表,在HTML4中,file控件内只允许放置一个文件,但是到了HTML5中,通过添加multiple属性,file控件内 ...

  5. node.js平台下,cropper.js实现图片裁剪预览并转换为base64发送至服务端。

    一 .准备工作 1.首先需要先下载cropper,常规使用npm,进入项目路径后执行以下命令: npm install cropper 2. cropper基于jquery,在此不要忘记引入jq,同时 ...

  6. iOS HTML图片本地预览

    引言 相信用过苹果手机的童鞋,会发现很多新闻类的应用,都可以实现HTML图片本地预览,那么这是如何实现的呢?本文将深入阐述其中的原理. 关于此功能,我还实现了一个DEMO,大家可以点击此访问更详细内容 ...

  7. cropper.js实现图片裁剪预览并转换为base64发送至服务端。

    一 .准备工作 1.首先需要先下载cropper,常规使用npm,进入项目路径后执行以下命令: npm install cropper 2. cropper基于jquery,在此不要忘记引入jq,同时 ...

  8. 前端实现在线预览pdf、docx、xls、ppt等文件

    思路:前台将各种格式的附件上传到服务器----后台通过方法将这些格式的文件转化成图片,前台通过放映ppt的方式将其展示在页面上. 关键点:reveal.js 参考文章:https://www.awes ...

  9. jQuery Lightbox图片放大预览

    简介:jQuery Lightbox图片放大预览代码是一款可以在用户点击页面中的小图片时,将该图片的高清版本以Lightbox的方式放大显示在页面的中间,提高用户的体验度. 效果展示 http://h ...

  10. js实现FileUpload选择图片后预览功能

    当asp.net的FileUpload选择一个图片后不需要上传就能显示出图片的预览功能, 代码: <%@ Page Language="C#" AutoEventWireup ...

随机推荐

  1. 《Entity Framework 6 Recipes》中文翻译系列 (15) -----第三章 查询之与列表值比较和过滤关联实体

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 3-8与列表值比较 问题 你想查询一个实体,条件是给定的列表中包含指定属性的值. 解 ...

  2. 2013 duilib入门简明教程 -- 简单控件介绍 (12)

        前面的教程应该让大家对duilib的整体有所映像了,下面就来介绍下duilib具体控件的使用.     由于官方没有提供默认的控件样式,所以我就尽量使用win7或者XP自带的按钮样式了,虽然界 ...

  3. Java中Eclipse的使用

    Eclipse是跨平台的自由集成开发环境(IDE),初衷主要为Java语言的定制.第一次使用就喜欢上了它.它可以帮我们导入包,而不需要我们导入,有很多快捷键提供我们使用,方便节省时间:最值得我喜欢的是 ...

  4. iOS瀑布流实现(Swift)

    这段时间突然想到一个很久之前用到的知识-瀑布流,本来想用一个简单的方法,发现自己走入了歧途,最终只能狠下心来重写UICollectionViewFlowLayout.下面我将用两种方法实现瀑布流,以及 ...

  5. thinkPHP入门

    什么是框架 框架就是一定结构的代码,框架提供一个开发web程序的基础架构以及常用的功能 代码,PHP框架的web程序开发拜倒了流水线上. php框架就是一定要按别人规定好的架构编写. php开发框架有 ...

  6. 使用 fixed role 授予权限

    今天下午,Leader 发mail给我,要求授予某个User对数据库只读的权限. Step1,在SQL Server中为该用户创建一个Login和User,在创建User时,建立Login 和 Use ...

  7. win7+IIS7下木有4.0框架问题的解决方案

  8. 在不动用sp_configure的情况下,如何 =》去掉列的自增长,并保留原数据

    异常处理汇总-数据库系列  http://www.cnblogs.com/dunitian/p/4522990.html 后期博客首发:http://dnt.dkill.net/Article/Det ...

  9. Python标准模块--collections

    1.模块简介 collections包含了一些特殊的容器,针对Python内置的容器,例如list.dict.set和tuple,提供了另一种选择: namedtuple,可以创建包含名称的tuple ...

  10. 区分元素特性attribute和对象属性property

    × 目录 [1]定义 [2]共有 [3]例外[4]特殊[5]自定义[6]混淆[7]总结 前面的话 其实attribute和property两个单词,翻译出来都是属性,但是<javascript高 ...