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 相关文章推荐
JSQL 基于客户端的成绩统计实现方法
May 05 Javascript
JavaScript编程开发中的五个实用小技巧
Jul 22 Javascript
使用js写的一个简易的投票
Nov 27 Javascript
JavaScript的设计模式经典之代理模式
Feb 24 Javascript
js实现String.Fomat的实例代码
Sep 02 Javascript
js浏览器html5表单验证
Oct 17 Javascript
原生js实现可拖拽效果
Feb 28 Javascript
深入对Vue.js $watch方法的理解
Mar 20 Javascript
浅谈react受控组件与非受控组件(小结)
Feb 09 Javascript
手写Node静态资源服务器的实现方法
Mar 20 Javascript
javascript 使用sleep函数的常见方法详解
Apr 26 Javascript
JavaScript实现点击切换验证码及校验
Jan 10 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/05/26 PHP
Codeigniter发送邮件的方法
2015/03/19 PHP
PHP读书笔记_运算符详解
2016/07/01 PHP
php之可变变量的实例详解
2017/09/12 PHP
php过滤htmlspecialchars() 函数实现把预定义的字符转换为 HTML 实体用法分析
2019/06/25 PHP
jquery select选中的一个小问题
2009/10/11 Javascript
基于jquery的下拉框改变动态添加和删除表格实现代码
2020/09/12 Javascript
用JS判断IE版本的代码 超管用!
2011/08/09 Javascript
浅析JavaScript中两种类型的全局对象/函数
2013/12/05 Javascript
javascript数组快速打乱重排的方法
2014/01/02 Javascript
JQuery中使用on方法绑定hover事件实例
2014/12/09 Javascript
js实现点击按钮弹出上传文件的窗口
2016/12/23 Javascript
JavaScript实现水平进度条拖拽效果
2017/01/18 Javascript
angular 用拦截器统一处理http请求和响应的方法
2017/06/08 Javascript
javascript中floor使用方法总结
2019/02/02 Javascript
详解Vue项目中实现锚点定位
2019/04/24 Javascript
webpack-mvc 传统多页面组件化开发详解
2019/05/07 Javascript
Vue使用富文本编辑器Vue-Quill-Editor(含图片自定义上传服务、清除复制粘贴样式等)
2020/05/15 Javascript
Python使用wxPython实现计算器
2018/01/30 Python
python 环境搭建 及python-3.4.4的下载和安装过程
2019/07/20 Python
对python3中的RE(正则表达式)-详细总结
2019/07/23 Python
python 数据提取及拆分的实现代码
2019/08/26 Python
Pandas中DataFrame交换列顺序的方法实现
2020/12/14 Python
html5实现滑块功能之type=&quot;range&quot;属性
2020/02/18 HTML / CSS
高中生的学习总结自我鉴定
2013/10/26 职场文书
物流仓管员岗位职责
2013/12/04 职场文书
产品促销活动策划书
2014/01/15 职场文书
计算机专业毕业生自我鉴定
2014/01/16 职场文书
称象教学反思
2014/02/03 职场文书
天鹅的故事教学反思
2014/02/04 职场文书
网络管理专业求职信
2014/03/15 职场文书
汉语言文学毕业生自荐信范文
2014/03/24 职场文书
建筑工地门卫岗位职责
2014/04/30 职场文书
干部作风整顿个人剖析材料
2014/10/06 职场文书
教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
签字仪式主持词
2015/07/03 职场文书