现在手机图片是越来越大了,上传图片流量耗费巨大。同时预览也是一个问题,所以利用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. 【性能为王】从PHP源码剖析array_keys和array_unique

    之前在[译]更快的方式实现PHP数组去重这篇文章里讨论了使用array_flip后再调用array_keys函数替换直接调用array_unique函数实现数组去重性能较好.由于原文没有给出源码分析和 ...

  2. .NET陷阱之六:从枚举值持久化带来大量空间消耗谈起

    好长时间没有写博文了,今天继续. 这次跟大家分享的内容起因于对一个枚举值列表的序列化,下面简化后的代码即能重现.为了明确起见,我显式指定了枚举的基础类型. // 定义一个枚举类型. public en ...

  3. MySQL中的全文索引

    之前曾经发表了一篇关于SQL Server全文索引的文章.现在将MySQL全文索引的配置过程记录一下. Step1:创建Student表 CREATE TABLE `student` ( `id` I ...

  4. 【VC++技术杂谈002】打印技术之获取及设置系统默认打印机

    本文主要介绍如何获取以及设置系统的默认打印机. 1.获取系统中的所有打印机 获取系统中的所有打印机可以使用EnumPrinters()函数,该函数可以枚举全部的本地.网络打印机信息.其函数原型为: B ...

  5. Objective-C 观察者模式--简单介绍和使用

    观察者模式(有时又被称为发布-订阅模式) 在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知. 这通常透过呼叫各观察者所提供的方法来实现.此种模式通常被用来实 ...

  6. 2013 duilib入门简明教程 -- 界面设计器 DuiDesigner (10)

        上一个教程讲解了怎么布局最大化.最小化.关闭按钮,但是如果手动去计算这三个按钮的位置和大小的话,非常的不直观,也很不方便.     所以这一章准备介绍duilib的UI设计器,由于这个设计器很 ...

  7. Oracle 超长字符串分割劈分

    Oracle 超长字符串分割劈分,具体能有多长没测过,反正很大.... 下面,,,,直奔主题了: CREATE OR REPLACE FUNCTION splitstr(p_string IN clo ...

  8. OpenJDK 编译-Linux环境

    说明:笔者是在Ubuntu 16.04虚拟机中编译 OpenJDK 8 源码下载 http://download.java.net/openjdk/jdk8/ 推荐直接下载openjdk-8-src- ...

  9. SSIS Destination 组件使用Fast-Load mode出错

    查看一个Package的历史Message 数据,发现 DataFlow Task 经常出错,错误信息的Description是: Description: "While reading c ...

  10. Python标准模块--logging

    1 logging模块简介 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 可以通过设置不同 ...