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还没执行完
发送的还是原来的图片
在调整后就可以实现图片的压缩了
js压缩上传图片base64长度的更多相关文章
- js压缩图片base64长度
var myCanvas=$('.img-container > img').cropper('getCroppedCanvas'); (function (base64){ var image ...
- js压缩上传图片
初学有不当之处,请多多指点, <body> <div class="cc"> <input type="file" id=&quo ...
- JS实现图片base64转blob对象,压缩图片,预览图片,图片旋转到正确角度
base64转blob对象 /** 将base64转换为文件对象 * @param {String} base64 base64字符串 * */ var convertBase64ToBlob = f ...
- 图片上传前 压缩,base64图片压缩 Exif.js处理ios拍照倒置等问题
曾写过在前端把图片按比例压缩不失真上传服务器的前端和后台,可惜没有及时做总结保留代码,只记得js利用了base64位压缩和Exif.js进行图片处理,还有其中让我头疼的ios拍照上传后会倒置等诸多问题 ...
- java 七牛上传图片到服务器(采用的html5 压缩 传输base64方式)
//html 页面如下<div class="form-group"> <label class="col-sm-2 control-label&quo ...
- 图片纯前端JS压缩的实现
一.图片上传前端压缩的现实意义 对于大尺寸图片的上传,在前端进行压缩除了省流量外,最大的意义是极大的提高了用户体验. 这种体验包括两方面: 由于上传图片尺寸比较小,因此上传速度会比较快,交互会更加流畅 ...
- HTML5 file API加canvas实现图片前端JS压缩并上传
一.图片上传前端压缩的现实意义 对于大尺寸图片的上传,在前端进行压缩除了省流量外,最大的意义是极大的提高了用户体验. 这种体验包括两方面: 由于上传图片尺寸比较小,因此上传速度会比较快,交互会更加流畅 ...
- js压缩、混淆和加密
最近看到有些论坛在讨论js压缩.混淆和加密的问题,特意找了些资料看了下,现在总结一下: 1.关于三者的定义与区别 压缩:删除 Javascript 代码中所有注释.跳格符号.换行符号及无用的空格,从而 ...
- 图片压缩(js压缩,底部有vue压缩图片依赖使用的教程链接)
directTurnIntoBase64(fileObj, callback) { var r = new FileReader(); // 转成base64 r.onload = function( ...
随机推荐
- Spring security 用户,角色,权限,资源
转自:http://blog.csdn.net/wybqq/article/details/52940194 关于Spring security对用户请求的处理过程 体现在这两个过程的体现. 关于用户 ...
- Mockito 简单使用
有一个月没写博客了,以后再忙也要抽时间写啊. 目的 正常情况下,如果要对 UserService 中方法的测试,那么其依赖的 UserDao 也要可以调通,但是,UserDao 可能并不是直接到 DB ...
- C# switch-case中的或(or)操作
今天需要在switch中添加一个条件,类似if中的 " || “操作 switch(var) { : : ... break; : : ... break; ... } 这样条件2 5会执行 ...
- s9303这样的arp表是代表什么意思?
s9303这样的arp表是代表什么意思? 在s9303交换机下dis arp 看到了最末2条有这样的记录 那个Incomplete 是什么意思呢? 答: 如果该字段显示为“Incomplete”,表示 ...
- 将html转换为Drupal模板文件的一般步骤
本篇文章以自定义page.tpl.php文件为例,介绍在Drupal主题开发工作中,将html文件转换为tpl模板文件的一般步骤. 仅保留html文件中body标记之间的内容(不含body标记),其他 ...
- 汉字转拼音首字母的java实现
工作中经常会遇到的一些排序问题,比如 按汉字的拼音首字母排序,比如人名排序等,就要用到下面的方法了,思路: 1. 获得汉字 2. 将汉字转换成首字母,并记录下(必要时保存到数据库) 3. 按首字母进行 ...
- 百度地图Api进阶教程-实例高级操作8.html
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- React Native常用第三方组件汇总--史上最全[转]
本文出处: http://blog.csdn.net/chichengjunma/article/details/52920137 React Native 项目常用第三方组件汇总: react-na ...
- R语言-分组统计
分组统计 1.假定有一组成绩数据,要求根据性别进行分组统计: > score ID score1 score2 Gender1 101 11.35321 0.9 male2 ...
- 4、QT分析之调试跟踪系统
原文地址:http://blog.163.com/net_worm/blog/static/127702419201002004518944/ 在我们前面的分析中,经常看到qWarning()和qDe ...