1. 图片文件转base64

<input accept="image/gif,image/jpeg,image/jpg,image/png" type="file" id="up" />
$(function() {
$("#up").change(function() {
var file = this.files[0];
if(undefined == file){
return ;
}
r = new FileReader();
r.readAsDataURL(file);
r.onload = function(e) {
var base64 = e.target.result; }
});
});

这样就获取到了图片文件的base64编码

可以把base64直接设置给img的src属性,用做图片回显用

2. canvas图片处理

2.1 canvas绘制图片和压缩图片

var suofang = function(base64, bili, callback) {
console.log("执行缩放程序,bili=" + bili);
//处理缩放,转格式
var _img = new Image();
_img.src = base64;
_img.onload = function() {
var _canvas = document.createElement("canvas");
var w = this.width / bili;
var h = this.height / bili;
_canvas.setAttribute("width", w);
_canvas.setAttribute("height", h);
_canvas.getContext("2d").drawImage(this, 0, 0, w, h);
}
}

压缩图片主要是通过长宽的缩放来缩小图片

2.2 canvas转base64

var base64 = canvas.toDataURL("image/png");

  

还可以传个参数做图片质量的设置,0-1

2.3 canvas转blob

_canvas.toBlob(function(blob) {
console.log(blob.size);
}, "image/jpeg");

2.4 base转blob

function dataURItoBlob(base64Data) {
var byteString;
if(base64Data.split(',')[0].indexOf('base64') >= 0)
byteString = atob(base64Data.split(',')[1]);
else
byteString = unescape(base64Data.split(',')[1]);
var mimeString = base64Data.split(',')[0].split(':')[1].split(';')[0];
var ia = new Uint8Array(byteString.length);
for(var i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
return new Blob([ia], {
type: mimeString
});
}

3. 文件上传

1. base64上传

可以使用ajax请求,发送普通请求即可。
需要注意的是,由于base64比较长,在测试后发现java后端接受到的参数为null。所以使用JSON.stringify()把data数据转成json,在后端用@requestBody接受

2. blog上传

var fd = new FormData();
fd.append("file", blob); //fileData为自定义
$.ajax({
type: "post",
url: "/file/upload",
async: true,
data: fd,
processData: false,
contentType: false,
success: function(r) { }
});
最后附上完整的代码<图片上传-转base64-缩放-转格式-缩放到不超过1M-ajax上传>
  • html
  • <input accept="image/gif,image/jpeg,image/jpg,image/png" type="file" id="up" />
    • 业务代码
    • $(function() {
      $("#up").change(function() {
      imageDeal(this, dealChange);
      });
      })
      var dealChange = function(blob, base64) {
      var fd = new FormData();
      fd.append("file", blob); //fileData为自定义
      $.ajax({
      type: "post",
      url: "/file/upload",
      async: true,
      data: fd,
      processData: false,
      contentType: false,
      success: function(r) { }
      });
      }
      • 处理代码
      • var imageDeal = function(ele, returnBase64) {
        //获取file,转成base64
        var file = ele.files[0]; //取传入的第一个文件
        if(undefined == file) { //如果未找到文件,结束函数,跳出
        return;
        }
        console.log("fileSize" + file.size);
        console.log(file.type); var r = new FileReader();
        r.readAsDataURL(file);
        r.onload = function(e) {
        var base64 = e.target.result;
        var bili = 1.5;
        console.log("压缩前:" + base64.length);
        suofang(base64, bili, returnBase64);
        }
        }
        var suofang = function(base64, bili, callback) {
        console.log("执行缩放程序,bili=" + bili);
        //处理缩放,转格式
        var _img = new Image();
        _img.src = base64;
        _img.onload = function() {
        var _canvas = document.createElement("canvas");
        var w = this.width / bili;
        var h = this.height / bili;
        _canvas.setAttribute("width", w);
        _canvas.setAttribute("height", h);
        _canvas.getContext("2d").drawImage(this, 0, 0, w, h);
        var base64 = _canvas.toDataURL("image/jpeg");
        _canvas.toBlob(function(blob) {
        console.log(blob.size); if(blob.size > 1024*1024){
        suofang(base64, bili, callback);
        }else{
        callback(blob, base64);
        }
        }, "image/jpeg");
        }
        }

前端图片转base64,转格式,转blob,上传的总结的更多相关文章

  1. 相册选择头像或者拍照 上传头像以NSData 图片二进制格式 表单上传

    一.点击头像图片 或者按钮 在相册选择照片返回img,网络上传头像要用data表单上传 (1)上传头像属性 // 图片二进制格式 表单上传 @property (nonatomic, strong) ...

  2. 适用于各浏览器支持图片预览,无刷新异步上传js插件

    文件上传无疑是web应用中一个非常常用的功能,不管是PHP.jsp还是aspx.mvc等都会需要文件上传,但是众所周知当使用自带的文件上传功能时总会出现页面刷新的情况.当然现在有了html5这个好东西 ...

  3. ueditor1.4.3配置过程(包含单独上传文件以及图片的使用),ueditor1.4.3上传配置(转 http://www.bkjia.com/webzh/1001016.html)

    这里使用的是ueditor1.4.3的jsp版本的UTF-8版本. 首先下载相应的ueditor,将ueditor文件夹直接拷贝到项目中,文件结构如下所示: 然后将项目要用的jar包导入到lib目录下 ...

  4. ebay商品基本属性组合成数据表格式,可用上传到系统递交数据

    该刊登表设计是利用VB写的,当时因为两个系统的数据不能直接对接,又copy并且组合SKU,一个表格一个表格填写,比较麻烦,还好刊登系统可以允许用excel表格上传数据 所以就下好模板,学了VB语言,在 ...

  5. 【转】前端图片该保存为什么格式?png or jpg?

    疑虑: 图片存储为web格式,该用什么格式保存呢?png?jpg?压缩比例该为多大?css spript的优劣?有时候我们可能会因为一张格式不正确的图片而导致设计品质的下降以及页面性能的降低.了解图片 ...

  6. canvas前端压缩图片和视频首屏缩略图并上传到服务器

    图片: var img = document.createElement('img') img.src = window.URL.createObjectURL(fileObj.file) // 加载 ...

  7. js中将文件的base64转换成file并上传到服务器

    ** * @param base64Codes * 图片的base64编码 */ function sumitImageFile(base64Codes){ var form=document.for ...

  8. js图片预览插件,不涉及上传

    小小的几十行代码,很牛逼,很实用. 支持多个图片的预览,只要new多个对象就行了. html如下 <!-- zhouxiang www.zhou-xiang.com --> <!DO ...

  9. php 图片操作类,支持生成缩略图,添加水印,上传缩略图

    <?php class Image {     //类开始     public $originimage = ""; //源图片文件地址     public $image ...

随机推荐

  1. 问题解决:java.sql.SQLException:Value '0000-00-00' can not be represented as java.sql.Date

    问题描述: 数据表中有记录的time字段(属性为timestamp)其值为:“0000-00-00 00:00:00” 程序使用select 语句从中取数据时出现以下异常: Java.sql.SQLE ...

  2. PHP------面向对象的特性

    面向对象的特性 一.面向对象有三大特性: 封装.继承.多态.(非常重要,第一要记住!!!!!!!!!!) 二.封装 封装就是用来做类的,把一个类封装起来.做类不能随便的做.我们做类不能随便去写一个类, ...

  3. python-装饰器的简单使用

    一.介绍 首先我们先来看一个简单的例子,在基础平台中有一个home()和tv()函数,在业务平台中调用此函数时,给出了响应的打印内容: 基础平台: def home(): print('welcome ...

  4. 如果js设置移动端有两种方式 大家可以参考

    //使用em单位 var scaleObj = { documentEle : document.documentElement, deviceWidth : document.documentEle ...

  5. Flex入坑指南

    弹性布局flex是一个几年前的CSS属性了,说它解放了一部分生产力不为过.至少解放了不少CSS布局相关的面试题 :) 之前网上流行的各种XX布局,什么postion: absolute+margin, ...

  6. render 函数渲染表格的当前数据列使用

    columns7: [ { title: '编号', align: 'center', width: 90, key: 'No', render: (h, params) => { return ...

  7. UIPanGestureRecognizer 拖动TableView改变其高度

    需求:项目中要求tableView的高度随着手拖动的位置而改变如下图: 关键代码如下: - (void)viewDidLoad{ panGestureRecognizer = [[UIPanGestu ...

  8. Qt 项目主进程接收Alarm 后在GUI上显示,并且可以有选择性输出文件

    项目主进程接收报警后,将alarm msg 发送给代理, 并将其分发: else if (msg.name == "MesLCUalarmRep") { QString error ...

  9. Mysql 几种常见的插入 Insert into,Replace Into,Insert ignore

    简要说下三者的区别:insert into 最普遍的插入,如果表中存在主键相同的数据,执行会报错. replace into 如果表中存在主键相同的数据则根据主键修改当前主键的数据,反之则插入(存在就 ...

  10. Jquery之倒计时计算

      setInterval(); function setDate(setTime){ var date = new Date();//获取系统当前时间 )+)+"-"+date. ...