现在手机图片是越来越大了,上传图片流量耗费巨大。同时预览也是一个问题,所以利用HTML5 file和canvas来解决这个问题。

  1. var upload = {
  2. _o: null,//对象id
  3. _auto: true,//是否自动上传
  4. _yl: false,//预览
  5. _ylFun: null,//预览回调函数
  6. _ys: ,//压缩 (1-100)100不压缩
  7. _sf: ,//缩放(1-100)100不缩放
  8.  
  9. img: null,
  10. mImg: null,
  11.  
  12. init: function (o, auto, yl, ylFun, ys, sf) {
  13. this._o = o;
  14. if (auto != undefined) this._auto = auto;
  15. if (yl != undefined) this._yl = yl;
  16. if (ylFun != undefined) this._ylFun = ylFun;
  17. if (ys != undefined) this._ys = ys;
  18. if (sf != undefined) this._sf = sf;
  19.  
  20. this.click();
  21. },
  22. click: function () {
  23. var o = document.getElementById(this._o);
  24. o.addEventListener('change', this.change, false);
  25. },
  26. change: function () {
  27. var oFile = this.files[];
  28. var FileInfo = {
  29. name: oFile.name || oFile.fileName,
  30. type: oFile.type || oFile.fileType,
  31. size: oFile.size || oFile.fileSize,
  32. modTime: oFile.lastModified,
  33. blob: oFile
  34. };
  35.  
  36. // Android下读不到type信息,从文件名中解析
  37. if (!FileInfo.type) {
  38. var ext = FileInfo.name.split(".").pop().toLowerCase();
  39. if (ext == 'jpg') { sFileType = 'image/jpeg'; }
  40. else { sFileType = 'image/' + ext;}
  41. }
  42. // 读取文件大小、修改时间等信息
  43. var rFilter = /^(image\/jpeg|image\/png|image\/gif|image\/bmp)$/i;
  44. if (!rFilter.test(FileInfo.type)) {
  45. return;//非图片
  46. }
  47.  
  48. var oImg = document.createElement('img');
  49. // 使用FileReader读取
  50. var oReader = new FileReader();
  51. oReader.onload = function () {
  52. var sBase64 = this.result;
  53. // 部分Android下base64字符串格式不完整
  54. if (window.gIsAndroid && sBase64.indexOf("data:image/") != ) {
  55. sBase64 = sBase64.replace("base64,", FileInfo.type + ";base64,");
  56. }
  57. oImg.src = sBase64;
  58. upload.img = oImg;
  59. if (upload != ) {
  60. upload.img = upload.compress(FileInfo.type);
  61. }
  62. if (upload._yl) {
  63. upload._ylFun(upload.img);
  64. }
  65. sBase64 = null;
  66. }
  67. oReader.readAsDataURL(oFile);
  68. },
  69. compress: function (mime_type) {
  70. var cvs = document.createElement('canvas');
  71. //naturalWidth真实图片的宽度
  72. var w = this.img.naturalWidth * this._sf / ;
  73. var h = this.img.naturalHeight * this._sf / ;
  74. cvs.width = w;
  75. cvs.height = h;
  76.  
  77. var ctx = cvs.getContext("2d");
  78. ctx.drawImage(this.img, , , w, h);
  79. var newImageData = cvs.toDataURL(mime_type, this._ys / );
  80. var result_image_obj = new Image();
  81. result_image_obj.src = newImageData;
  82. return result_image_obj;
  83. }
  84. };

html代码

  1. <input type="file" id="upload" />
  2.  
  3. <script src="js/zepto.min.js"></script>
  4. <script src="js/upload.js"></script>
  5. <script type="text/javascript">
  6. $(function () {
  7. upload.init('upload', false, true, function (e) {
  8. $('#upload).before(e);
  9. },,);
  10. });
  11. </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. .NET中使用APlayer组件自制播放器

    目录 说明 APlayer介绍 APlayer具备功能 APlayer使用 自制播放器Demo 未完成工作 源码下载 说明 由于需求原因,需要在项目中(桌面程序)集成一个在线播放视频的功能.大概要具备 ...

  2. 《Entity Framework 6 Recipes》中文翻译系列 (7) -----第二章 实体数据建模基础之拆分实体到多表以及拆分表到多实体

    2-6 拆分实体到多表 问题 你有两张或是更多的表,他们共享一样的主键,你想将他们映射到一个单独的实体. 解决方案 让我们用图2-15所示的两张表来演示这种情况. 图 2-15,两张表,Prodeuc ...

  3. JSON数据的定义

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. android studio sdk 不能更新

    网上看到好多sdk不能更新的,解决办法基本上一下,试了下大都没用,,有人说改hosts ,我试了 貌似没用 下面是我亲测可以更新的一种方法:使用镜像地址更新 步骤: 1. 打开 SDK Manager ...

  5. [转]Linux常用命令

    系统信息arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS / ...

  6. MongoDB 数据分发

    在MongoDB(版本 3.2.9)中,数据的分发是指将collection的数据拆分成块(chunk),分布到不同的分片(shard)上,数据分发主要有2种方式:基于数据块(chunk)数量的均衡分 ...

  7. SSISDB8:使用SSISDB记录的消息Troubleshoot packages

    在执行Package时,SSISDB都会创建唯一的OperationID 和 ExecutionID,标识对package执行的操作和执行实例(Execution Instance),并记录opera ...

  8. VMware 中如何打开U盘弹出U盘或者移动硬盘的(两种方法)

    1.U盘如下,插入后都是直接在win里面显示的 2.选择连接u盘 3.u盘就可以在虚拟机里面显示了 4.弹出则选择断开连接 扩展:如果无效:请参考这种方法 (给虚拟机分配一个临时硬盘,然后设置这个临时 ...

  9. NotSupportedException-无法将类型“System.DateTime”强制转换为类型“System.Object”

    几张图就可以说明一切 2015-03-29 21:54:09,206 [77] ERROR log - System.NotSupportedException: 无法将类型“System.DateT ...

  10. Android探索之ContentProvider熟悉而又陌生的组件

    前言: 总结这篇文章之前我们先来回顾一下Android Sqlite数据库,参考文章:http://www.cnblogs.com/whoislcj/p/5506294.html,Android程序内 ...