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 ...
随机推荐
- .NET中使用APlayer组件自制播放器
目录 说明 APlayer介绍 APlayer具备功能 APlayer使用 自制播放器Demo 未完成工作 源码下载 说明 由于需求原因,需要在项目中(桌面程序)集成一个在线播放视频的功能.大概要具备 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (7) -----第二章 实体数据建模基础之拆分实体到多表以及拆分表到多实体
2-6 拆分实体到多表 问题 你有两张或是更多的表,他们共享一样的主键,你想将他们映射到一个单独的实体. 解决方案 让我们用图2-15所示的两张表来演示这种情况. 图 2-15,两张表,Prodeuc ...
- JSON数据的定义
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- android studio sdk 不能更新
网上看到好多sdk不能更新的,解决办法基本上一下,试了下大都没用,,有人说改hosts ,我试了 貌似没用 下面是我亲测可以更新的一种方法:使用镜像地址更新 步骤: 1. 打开 SDK Manager ...
- [转]Linux常用命令
系统信息arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS / ...
- MongoDB 数据分发
在MongoDB(版本 3.2.9)中,数据的分发是指将collection的数据拆分成块(chunk),分布到不同的分片(shard)上,数据分发主要有2种方式:基于数据块(chunk)数量的均衡分 ...
- SSISDB8:使用SSISDB记录的消息Troubleshoot packages
在执行Package时,SSISDB都会创建唯一的OperationID 和 ExecutionID,标识对package执行的操作和执行实例(Execution Instance),并记录opera ...
- VMware 中如何打开U盘弹出U盘或者移动硬盘的(两种方法)
1.U盘如下,插入后都是直接在win里面显示的 2.选择连接u盘 3.u盘就可以在虚拟机里面显示了 4.弹出则选择断开连接 扩展:如果无效:请参考这种方法 (给虚拟机分配一个临时硬盘,然后设置这个临时 ...
- NotSupportedException-无法将类型“System.DateTime”强制转换为类型“System.Object”
几张图就可以说明一切 2015-03-29 21:54:09,206 [77] ERROR log - System.NotSupportedException: 无法将类型“System.DateT ...
- Android探索之ContentProvider熟悉而又陌生的组件
前言: 总结这篇文章之前我们先来回顾一下Android Sqlite数据库,参考文章:http://www.cnblogs.com/whoislcj/p/5506294.html,Android程序内 ...