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 相关文章推荐
JavaScript判断一个URL链接是否有效的实现方法
Oct 08 Javascript
三种方式获取XMLHttpRequest对象
Apr 21 Javascript
基于jquery实现图片相关操作(重绘、获取尺寸、调整大小、缩放)
Dec 25 Javascript
js的form表单提交url传参数(包含+等特殊字符)的两种解决方法
May 25 Javascript
jQuery autoComplete插件两种使用方式及动态改变参数值的方法详解
Oct 24 Javascript
JavaScript面向对象分层思维全面解析
Nov 22 Javascript
解析Vue2.0双向绑定实现原理
Feb 23 Javascript
jQuery自定义多选下拉框效果
Jun 19 jQuery
详解webpack进阶之loader篇
Aug 23 Javascript
js 将canvas生成图片保存,或直接保存一张图片的实现方法
Jan 02 Javascript
vue开发中遇到的问题总结
Apr 07 Javascript
Nuxt配置Element-UI按需引入的操作方法
Jul 06 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生成EXCEL的东东
2006/10/09 PHP
用Zend Encode编写开发PHP程序
2010/02/21 PHP
PHP实现一维数组与二维数组去重功能示例
2018/05/24 PHP
PHP7创建销毁session的实例方法
2020/02/03 PHP
JavaScript 参考教程
2006/12/29 Javascript
页面只有一个text的时候,回车自动submit的解决方法
2010/08/12 Javascript
javascript 兼容所有浏览器的DOM扩展功能
2012/08/01 Javascript
简介JavaScript中getUTCMonth()方法的使用
2015/06/10 Javascript
node.js+express制作网页计算器
2016/01/17 Javascript
文本框只能输入数字的实现方法(兼容IE火狐)
2016/06/25 Javascript
js利用clipboardData实现截屏粘贴功能
2016/10/12 Javascript
Vue配合iView实现省市二级联动的示例代码
2018/07/27 Javascript
vue组件挂载到全局方法的示例代码
2018/08/02 Javascript
浅谈vue方法内的方法使用this的问题
2018/09/15 Javascript
Node.js一行代码实现静态文件服务器的方法步骤
2019/05/07 Javascript
Node.js 深度调试方法解析
2020/07/28 Javascript
python实现支持目录FTP上传下载文件的方法
2015/06/03 Python
详解Python各大聊天系统的屏蔽脏话功能原理
2016/12/01 Python
Python自动发邮件脚本
2017/03/31 Python
Python计算开方、立方、圆周率,精确到小数点后任意位的方法
2018/07/17 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
2019/02/16 Python
Django认证系统user对象实现过程解析
2020/03/02 Python
Django实现从数据库中获取到的数据转换为dict
2020/03/27 Python
高考考python编程是真的吗
2020/07/20 Python
MoviePy常用剪辑类及Python视频剪辑自动化
2020/12/18 Python
浅析Python打包时包含静态文件处理方法
2021/01/15 Python
使用CSS禁止textarea调整大小功能的方法
2015/03/13 HTML / CSS
STP的判定过程
2012/10/01 面试题
考博专家推荐信模板
2013/12/02 职场文书
后勤主管工作职责
2013/12/07 职场文书
促销活动总结模板
2014/07/01 职场文书
学校组织向国旗敬礼活动方案(中小学适用)
2014/09/27 职场文书
2014年纳税评估工作总结
2014/12/23 职场文书
任命书格式范文
2015/09/22 职场文书
干部外出学习心得体会
2016/01/18 职场文书
python迷宫问题深度优先遍历实例
2021/06/20 Python