js压缩上传图片base64长度

逆水行舟,不进则退      2022-02-09     650

关键词:

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

发送的还是原来的图片

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


前端js实现canvas压缩图片并上传(代码片段)

一.上传前压缩图片的好处可以减少用户的等待时间,提升使用体验,目前手机拍摄的图片文件大小一般在几M左右,文件直接上传时会有卡顿现象。可以减少服务端的存储空间。再次回去图片资源是也可以快速的加载... 查看详情

js图片压缩转成base64

HTML:<!doctypehtml><html><head><metacharset="UTF-8"><metaname="viewport"content="initial-scale=1.0,maximum-scale=1.0,user-scalable=no"/><title>测试</title><l 查看详情

ipcloud上传裁切图片,保存为base64再压缩传给后台

<!doctypehtml><html><head><metacharset="utf-8"><metaname="viewport"content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0"/>< 查看详情

base64文件转multipartfile文件

...项目中,上传图片或者文件过大,这个时候我们就要选择压缩文件,压缩到我们指定的范围内在上传到服务器,当然压缩也是可以放到服务器进行操作的,但是考虑到前端传输时间问题,所以我们一般都是放到前端压缩后在上传... 查看详情

js实现图片上传预览功能,使用base64编码来实现

实现图片上传的方法有很多,这里我们介绍比较简单的一种,使用base64对图片信息进行编码,然后直接将图片的base64信息存到数据库。但是对于系统中需要上传的图片较多时并不建议采用这种方式,我们一般会选择存图片路径的... 查看详情

如何在没有base64格式的vue js中上传图片?

】如何在没有base64格式的vuejs中上传图片?【英文标题】:Howtouploadimagesinvuejswithoutbase64format?【发布时间】:2018-06-0305:38:16【问题描述】:当我这样做时,我得到了base64编码的图像。我只需要上传文件。如何更改代码<script>sub... 查看详情

(c#.net)前端js图片压缩将得到的base64字符串保存为图片

<scriptsrc="jquery-1.7.2.min.js"></script><body><inputtype="file"id="img"name="img"/><imgid="test"src=""/><inputtype="button"id="submit"value="确定"onclick="submit()"/&g 查看详情

js获取input上传图片装换为base64格式图片

<inputname="upimage"id="upload_file"type="file"><imgsrc="/img/touxiang.jpg"id="showImage"><br/><br/><scriptsrc="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></scr 查看详情

图片压缩canvas

实现流程:获取<inputtype="file">上传的文件;使用FileReader读取图片,并新建一个Image对象将FileReader读取的图片数据放进去;使用canvas将Image对象等比缩放并写入到画布中,保存为base64格式的数据(这里使用的是FormData对象上传... 查看详情

前端预览图片和h5canvas压缩图片上传

思路是将图片抽样显示在canvas上,然后用通过canvas.toDataURL方法得到base64字符串来实现压缩。1.base64转二进制文件/***dataURLtoblob,reftohttps://gist.github.com/fupslot/5015897*@paramdataURI*@returns{Blob}*/functiondataURItoBlob(dataURI){var 查看详情

base64上传图片保存到数据库

js实现图片上传预览功能,使用base64编码来实现实现图片上传的方法有很多,这里我们介绍比较简单的一种,使用base64对图片信息进行编码,然后直接将图片的base64信息存到数据库。但是对于系统中需要上传的图片较多时并不建... 查看详情

vue图片压缩上传(代码片段)

一、图片压缩图片压缩工具类最大高度和最大宽度都为500,如果超出大小将等比例缩放。注意可能出现压缩后比原图更大的情况,在调用的地方自己判断大小并决定上传压缩前或压缩后的图到服务器。//将base64转换为blobco... 查看详情

vue图片压缩上传(代码片段)

一、图片压缩图片压缩工具类最大高度和最大宽度都为500,如果超出大小将等比例缩放。注意可能出现压缩后比原图更大的情况,在调用的地方自己判断大小并决定上传压缩前或压缩后的图到服务器。//将base64转换为blobco... 查看详情

jmeter测试上传图片base64编码接口

最近遇到一个项目,接口中有需要上传图片的字段,它是以图片base64编码格式的形式传递的。(Base64目前主要用于HTML5、移动开发等不考虑IE6的场景中。)请求报文示例如下:关于如何测试实现的问题:1)如何对图片进行编码?... 查看详情

android图片转base64上传提示java.lang.outofmemoryerror

我希望在不压缩图片的情况下解决,因为需要用这些高清图片。————————转64的代码StringBuilderbase64=newStringBuilder("");Filef=newFile(filePath);FileInputStreamfis=newFileInputStream(f);byte[]b=newbyte[(int)f.length()];fis.read(b,0,b.length);fis.cl... 查看详情

上传base64图片到七牛云前端遇到的坑

介意前端普通引入七牛云SDk上传图片到七牛云需要多个js,所以才有了base64的上传方式,简化操作,(懒。)七牛云官方文档如下https://developer.qiniu.com/kodo/kb/1326/how-to-upload-photos-to-seven-niuyun-base64-code  我们前端理所当然就... 查看详情

base64图片上传,推到又拍云

Html部分<label><imgid="nvhai"src="{$agent.id|get_headimg}"height="70px"width="70"><inputstyle="display:none"id="tou"type="file"onchange="previewFile()"></label> Js部分//单文件上传f 查看详情

base64转图片上传

不成功,但是有一定的借鉴性/** *@parambase64Codes *      图片的base64编码 */functionsumitImageFile(base64Codes){//debuggerconsole.log(convertBase64UrlToBlob(base64Codes));&nb 查看详情