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还没执行完

发送的还是原来的图片

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

时间: 2024-10-08 21:04:46

js压缩上传图片base64长度的相关文章

js压缩图片base64长度

1 var myCanvas=$('.img-container > img').cropper('getCroppedCanvas'); 2 (function (base64){ 3 var image = new Image(),newBase64,MAX_HEIGHT = 160; 4 image.onload = function(){ 5 var canvas = document.getElementById("myCanvas"); 6 if(image.heig

HTML5 file API加canvas实现图片前端JS压缩并上传 (转载)

一.图片上传前端压缩的现实意义 对于大尺寸图片的上传,在前端进行压缩除了省流量外,最大的意义是极大的提高了用户体验. 这种体验包括两方面: 由于上传图片尺寸比较小,因此上传速度会比较快,交互会更加流畅,同时大大降低了网络异常导致上传失败风险. 最最重要的体验改进点:省略了图片的再加工成本.很多网站的图片上传功能都会对图片的大小进行限制,尤其是头像上传,限制5M或者2M以内是非常常见的.然后现在的数码设备拍摄功能都非常出众,一张原始图片超过2M几乎是标配,此时如果用户想把手机或相机中的某个得意图片

JS 图片转Base64

JS 图片转Base64 有时候需要向HTML中插入一张图片,可苦于上线后找不到一个合适的网盘来存储这些图片,有没有一种办法能将图片转换成文字,然后直接插入HTML中呢,通过Base64编码就可以解决这个问题. 废话不多说直接上代码.不知道什么是Base64的请自行百度. 图片转Base64 示例代码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>JS

区域及分离、Js压缩、css、jquery扩展

后台管理区域及分离.Js压缩.css.jquery扩展 本系列目录:ASP.NET MVC4入门到精通系列目录汇总 有好一段时间没更新博文了,最近在忙两件事:1.看书,学习中...2.为公司年会节目做准备,由于许久没有练习双截棍了,难免生疏,所以现在临时抱佛脚.深圳最近的天气反常,许多人感冒了,我也成为其中之一,大家注意身体... 这一篇,我来简单的讲一下接下来项目中会用到的一些杂七杂八的技术. 区域及分离 在15.ASP.NET MVC入门到精通——MVC-路由中,我已经简要说明了区域的分离.

sublime text2之js压缩-Js Minifier

一款基于Google Closure compiler压缩Js文件插件. 快捷键: Ctrl+Alt+M            当前文件内压缩Js代码(不推荐) Ctrl+Alt+Shift+M   压缩Js并生成压缩文件 *.min.js 安装成功重启,如果报错,在配置里改一个参数,"compiler": "uglify_js", { // the closure compiler adds new lines every 500 characters // fo

26、ASP.NET MVC入门到精通——后台管理区域及分离、Js压缩、css、jquery扩展

本系列目录:ASP.NET MVC4入门到精通系列目录汇总 有好一段时间没更新博文了,最近在忙两件事:1.看书,学习中...2.为公司年会节目做准备,由于许久没有练习双截棍了,难免生疏,所以现在临时抱佛脚.深圳最近的天气反常,许多人感冒了,我也成为其中之一,大家注意身体... 这一篇,我来简单的讲一下接下来项目中会用到的一些杂七杂八的技术. 区域及分离 在15.ASP.NET MVC入门到精通——MVC-路由中,我已经简要说明了区域的分离. 1.右键单击Web项目,“添加”——“区域”,区域名,

r.js压缩代码常用的配置及命令

最近用require写了一个网站的模块,到压缩的时候,各种查资料学习,但由于时间较紧,将所有代码都压缩成一个文件,导致代码的体积很大,今天抽时间网上参考下官网的说明配置,将这次压缩代码的配置及运行命令记录下来,以后留着用. 1. js的压缩 这次只是初步应用,如果有好的方法或有误的地方,还望各位大侠们指教. 第一种配置的文件: 需要把所有依赖的文件都压缩到当前代码中. ({ baseUrl: "./", paths: { amd_modules: "../amd_module

js压缩 uglify(2)

一.故事总有其背景 年末将至,很多闲适的时间,于是刷刷微博,接触各种纷杂的信息——美其名曰“学习”.运气不错,遇到了一个新名词,uglifyjs. 据说是用来压缩JS文件的,据说还能优化JS,据说是基于node的,还据说比Google Closure Compiler更带感,哦?激起了我的好奇心.百之谷之,哟,相关的介绍还不少.然后折腾了个把小时,基本上知道了是个怎么回事. 我觉得吧,还是有些用的,即使是不是从事node开发的人,抽个小空,share之,于是就有了本文.人总有浮躁的时候,我也不例

js压缩、混淆和加密

最近看到有些论坛在讨论js压缩.混淆和加密的问题,特意找了些资料看了下,现在总结一下: 1.关于三者的定义与区别 压缩:删除 Javascript 代码中所有注释.跳格符号.换行符号及无用的空格,从而压缩 JS 文件大小,优化页面加载速度. 混淆:经过编码将变量和函数原命名改为毫无意义的命名(如function(a,b,c,e,g)等),以防止他人窥视和窃取 Javascript 源代码,也有一定压缩效果. 加密:一般用eval方法加密,效果与混淆相似,也做到了压缩的效果. 从定义中可以看出,压