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( ...
随机推荐
- PHP数据库连接失败--could not find driver 解决办法
数据库连接失败could not find driver在调试一个PHP程序时,报了这个错误, could not find driver 经过一番查找,结合自己的思考和实践,终于找到了问题所在. 原 ...
- (转) Hadoop1.2.1安装
环境:ubuntu13 使用的用户为普通用户.如:用户ru jdk安装略 1.安装ssh (1) sudo apt-get install openssh-server (2)配置ssh面密码登录 $ ...
- winsock.h与winsock2.h出现重定义或不同的链接
经常遇到编译socket程序的时候生成几百个错误 以下是出错后的错误信息: >c:\program files\microsoft sdks\windows\v6.0a\include\ws2d ...
- Linxu安装Tomcat与Jdk并卸载自带OpenJdk
下载安装tomcat 1.下载apache-tomcat-7.0.47.tar.gz tomcat压缩包上传到linxu服务器 2.cd到文件存放目录使用(tar -xvzf apache-tomca ...
- mosquitto简单应用
1. 简述 一款实现了消息推送协议 MQTT v3.1 的开源消息代理软件,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单,比如现在应用广泛的低功耗传感器,手机 ...
- 递归 - 求 n 个球中取 m 个不同的球,有多少种取法?
代码: #include <iostream> using namespace std; int F(int _n, int _m) { if(_n < _m) return 0; ...
- Error:不能将"char*"类型的值分配到"LPSTR"类型的实体 也许 "char*"类型的实参与"LPCWSTR"类型的形参不兼容
http://www.myexception.cn/ruby-rails/1876106.html 选择“XXX项目”->“属性”->“配置属性”->“常规”选项中,把“使用 Uni ...
- Java学习路线图,Java学习计划建议
怎么学习Java,这是很多新手经常遇到的问题,现在我简单描述下一个Java初学者到就业要学到的一些东西: 首先要明白Java体系设计到得三个方面:J2SE,J2EE,J2ME(KJAVA).J ...
- JS 控制页面超时后自动跳转到登陆页面
<span style="font-size: small;"><script language="javascript"> var m ...
- Jquery ThickBox的使用
thickbox是jQuery的一个插件,其作用是弹出对话框.网页框,使用户体验度更加愉悦,下面就来简单介绍它的几种用法.声明一下:这只是个人的总结记载而已.准备工作:你需要三个文件:thickbox ...