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 相关文章推荐
JXTree对象,读取外部xml文件数据,生成树的函数
Apr 02 Javascript
js word表格动态添加代码
Jun 07 Javascript
jquery.validate 自定义验证方法及validate相关参数
Jan 18 Javascript
jQuery qrcode生成二维码的方法
Apr 03 Javascript
JS实现输入框提示文字点击时消失效果
Jul 19 Javascript
Highcharts学习之坐标轴
Aug 02 Javascript
JS实现颜色梯度与渐变效果完整实例
Dec 30 Javascript
15分钟深入了解JS继承分类、原理与用法
Jan 19 Javascript
微信小程序+云开发实现欢迎登录注册
May 24 Javascript
微信小程序new Date()方法失效问题解决方法
Jul 29 Javascript
Typescript的三种运行方式(小结)
Sep 18 Javascript
用JS写一个发布订阅模式
Nov 07 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
在Zeus Web Server中安装PHP语言支持
2006/10/09 PHP
PHP+MySQL 制作简单的留言本
2009/11/02 PHP
PHP写的加密函数,支持私人密钥(详细介绍)
2013/06/09 PHP
ThinkPHP模板Switch标签用法示例
2014/06/30 PHP
WordPress的文章自动添加关键词及关键词的SEO优化
2016/03/01 PHP
yii2局部关闭(开启)csrf的验证的实例代码
2017/07/10 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
PHP实现简单注册登录系统
2020/12/28 PHP
JS OOP包机制,类创建的方法定义
2009/11/02 Javascript
jQuery 开天辟地入门篇一
2009/12/09 Javascript
javascript中全局对象的isNaN()方法使用介绍
2013/12/19 Javascript
SuperSlide2实现图片滚动特效
2014/06/20 Javascript
完美JQuery图片切换效果的简单实现
2016/07/21 Javascript
js基础之DOM中元素对象的属性方法详解
2016/10/28 Javascript
vue数据双向绑定的注意点
2017/06/23 Javascript
JavaScript 程序错误Cannot use 'in' operator to search的解决方法
2017/07/10 Javascript
JS库之Three.js 简易入门教程(详解之一)
2017/09/13 Javascript
js 数组详细操作方法及解析合集
2018/06/01 Javascript
vue实现点击选中,其他的不选中方法
2018/09/05 Javascript
jquery实现的分页显示功能示例
2019/08/23 jQuery
Vue.js如何使用Socket.IO的示例代码
2019/09/05 Javascript
[06:44]2018DOTA2亚洲邀请赛4.5 SOLO赛 MidOne vs Sumail
2018/04/06 DOTA
python从入门到精通(DAY 1)
2015/12/20 Python
简单的python后台管理程序
2017/04/13 Python
python爬虫之xpath的基本使用详解
2018/04/18 Python
基于pytorch中的Sequential用法说明
2020/06/24 Python
python tqdm库的使用
2020/11/30 Python
css3的focus-within选择器的使用
2020/05/11 HTML / CSS
html+css3实现的登录界面
2020/12/09 HTML / CSS
波兰最大的儿童服装连锁店之一:5.10.15.
2018/02/11 全球购物
DC Shoes俄罗斯官网:美国滑板鞋和服饰品牌
2020/08/19 全球购物
Blue Nile中国官网:全球知名的钻石和珠宝网络零售商
2020/03/22 全球购物
保密工作目标责任书
2014/07/28 职场文书
个人简历自我评价怎么写
2015/03/10 职场文书
主持人大赛开场白
2015/05/29 职场文书
个人更名证明
2015/06/23 职场文书