JS实现压缩上传图片base64长度功能


Posted in Javascript onDecember 03, 2019

这篇文章主要介绍了js实现压缩上传图片base64长度功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

im发送图片,现将图片压缩再上传

1) 调用 FileReader 的 reader.readAsDataURL(img); 方法, 在其onload事件中, 将用户选择的图片读入 Image对象.

2) 在image对象的 onload 事件中, 通过 canvas 的 canvas.getContext('2d') 的 drawImage 方法, 将Image 改变大小绘制到canvas上.

3) 通过 canvas.toDataURL("image/jpeg", 1); 方法, 将图片变成base64字符串, 放到send_image_value

toDataURL

canvas.toDataURL(type, encoderOptions); 

返回值

包含 data URI 的DOMString

type

图片格式,默认为 image/png

encoderOptions

在指定图片格式为 image/jpeg 或 image/webp的情况下,可以从 0 到 1 的区间内选择图片的质量。如果超出取值范围,将会使用默认值 0.92。其他参数会被忽略。

html

<input id="sendImage" title="send a picture" type="file" accept="image/*" onchange="imgChange(this)">
 <input type="hidden" value="" id="send_image_value">
 <img id="showLoadingimg" src="'+CHAT_SITE_URL+'/templates/default/images/loading.gif" style="position:relative;left:200px;top:200px;z-index:999;display:none;">

js

function imgChange(e){
  //检查是否有文件被选中
    if (e.files.length != 0) {
      var file = e.files[0],
      fileType = file.type,
      reader = new FileReader();
      if (!reader) {
        e.value = '';
        return;
      };
      var size = file.size;
      var max_size = 2*1024*1024;
      if(size>max_size){
        e.value = '';
        $("#send_alert").html('file is too large(>2M)');
        return;
      }
      $("#showLoadingimg").show();
      reader.onload = function(e) {
        //读取成功,显示到页面并发送到服务器
        e.value = '';
        var org_img = e.target.result;
        var image_base64 = org_img;
        if(size>1024*80){//>80K的
          var img = new Image(); 
          img.src = org_img; 
          img.onload=function(){
            var scale = 1;  
            if(this.width > 300 || this.height > 300){   
              if(this.width > this.height){  
                scale = 300 / this.width; 
              }else{  
                scale = 300 / this.height;  
              }  
            } 
            var canvas = document.createElement("canvas"), drawer = canvas.getContext("2d");
            if(scale!=1) {//按最大高度等比缩放
              img.width *= scale;
              img.height *= scale;
            }
            canvas.width = img.width;
            canvas.height = img.width * (img.height / img.width);
            drawer.drawImage(img, 0, 0, canvas.width, canvas.height);
            var tmp_code = image_base64 = canvas.toDataURL(fileType);
            if(tmp_code!='data:,'){
              image_base64 = tmp_code;
            }
            img_send(image_base64);
          }; 
             
        }else{
          img_send(image_base64);
        }
         
      };
      reader.readAsDataURL(file);
    }
  }
  /**
   *为将图片赋值给消息
  **/
  function img_send(image_base64){
    if(image_base64!='data:,'){
      $("#send_image_value").val(image_base64);
      send_msg();
      $("#showLoadingimg").hide();
      $('#sendImage').val("");
    }
  }

开始时,toDataURL获取的值是data:,

$("#send_image_value").val(image_base64);
send_msg();

这两句写在

reader.onload方法的最下面这就导致图片并没有压缩

因为img.onload还没执行完

发送的还是原来的图片

在调整后就可以实现图片的压缩了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS删除字符串中重复字符方法
Mar 09 Javascript
Js冒泡事件详解及阻止示例
Mar 21 Javascript
JQuery弹出炫丽对话框的同时让背景变灰色
May 22 Javascript
gridview生成时如何去掉style属性中的border-collapse
Sep 30 Javascript
jQuery中parent()方法用法实例
Jan 07 Javascript
seajs加载jquery时提示$ is not a function该怎么解决
Oct 23 Javascript
JS实现带提示的星级评分效果完整实例
Oct 30 Javascript
js仿百度音乐全选操作
Jan 13 Javascript
浅谈angular4实际项目搭建总结
Dec 01 Javascript
React 无状态组件(Stateless Component) 与高阶组件
Aug 14 Javascript
详解vue项目打包步骤
Mar 29 Javascript
JavaScript 禁止用户保存图片的实现代码
Apr 28 Javascript
js实现AI五子棋人机大战
May 28 #Javascript
angular inputNumber指令输入框只能输入数字的实现
Dec 03 #Javascript
JavaScript的console命令使用实例
Dec 03 #Javascript
JavaScript实现京东放大镜效果
Dec 03 #Javascript
微信小程序实现图片压缩
Dec 03 #Javascript
Ant Design Pro 下实现文件下载的实现代码
Dec 03 #Javascript
Vue.js 无限滚动列表性能优化方案
Dec 02 #Javascript
You might like
PHP 采集获取指定网址的内容
2010/01/05 PHP
PHP导出MySQL数据到Excel文件(fputcsv)
2011/07/03 PHP
PHP实现基于状态的责任链审批模式详解
2019/05/31 PHP
[JS源码]超长文章自动分页(客户端版)
2007/01/09 Javascript
How to Auto Include a Javascript File
2007/02/02 Javascript
极酷的javascirpt,让你随意编辑任何网页
2007/02/25 Javascript
jQuery的attr与prop使用介绍
2013/10/10 Javascript
IE下使用jQuery重置iframe地址时内存泄露问题解决办法
2015/02/05 Javascript
JS函数多个参数默认值指定方法分析
2016/11/28 Javascript
js生成随机数方法和实例
2017/01/17 Javascript
Angular.Js之Scope作用域的学习教程
2017/04/27 Javascript
简单实现JavaScript弹幕效果
2020/08/27 Javascript
Vue实现web分页组件详解
2017/11/28 Javascript
微信小程序商品详情页的底部弹出框效果
2020/11/16 Javascript
支付宝小程序自定义弹窗dialog插件的实现代码
2018/11/30 Javascript
node.js使用express框架进行文件上传详解
2019/03/03 Javascript
Django模板继承 extend标签实例代码详解
2019/05/16 Javascript
微信小程序实现手势滑动卡片效果
2019/08/26 Javascript
vue router 传参获取不到的解决方式
2019/11/13 Javascript
Node.js操作MongoDB数据库实例分析
2020/01/19 Javascript
24个解决实际问题的ES6代码片段(小结)
2020/02/02 Javascript
跟老齐学Python之眼花缭乱的运算符
2014/09/14 Python
Python彩色化Linux的命令行终端界面的代码实例分享
2016/07/02 Python
Python中使用logging和traceback模块记录日志和跟踪异常
2019/04/09 Python
PyTorch使用cpu加载模型运算方式
2020/01/13 Python
python中count函数简单的实例讲解
2020/02/06 Python
学习Python列表的基础知识汇总
2020/03/10 Python
css3 仿写阿里云水纹效果的示例代码
2018/02/10 HTML / CSS
FragranceNet中文网:北美健康美容线上零售商
2020/08/26 全球购物
函授药学自我鉴定
2014/02/07 职场文书
党的群众路线教育实践活动学习心得体会
2014/03/03 职场文书
农村面貌改造提升实施方案
2014/03/18 职场文书
竞选班干部演讲稿
2014/04/24 职场文书
2019假期福利管理制度!
2019/07/15 职场文书
详解解Django 多对多表关系的三种创建方式
2021/08/23 Python
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
2022/04/14 Python