image to base64 to blob


////////////////////////////////////////////////////////////////////////////////////////////////
// 名称: base64图片转二进制文件函数
// 作者: 郭椿安 日期:2018-02-12 //
// 用法: var blobImg = baseSrc2Blob($("#imgId").attr('src')); //这个图片的src值必须是base64字符
// fData.set("文件key", blobImg, $("IMG_input").val()); //第三个参数为传送文件名称,如 20158.jpg
//////////////////////////////////////////////////////////////////////////////////////////////// function baseSrc2Blob(img64Str) { //处理图片base64字符,然后调用转换为二进制函数并返回文件 var block = img64Str.split(";"); // Split the base64 string in data and contentType
var contentType = block[0].split(":")[1];// In this case "image/gif" //Get the content type
var realData = block[1].split(",")[1];// In this case "iVBORw0KGg...." //get the real base64 content of the file
var blob_file = b64toBlob(realData, contentType);// Convert to blob //转成二级制原始文件内容
return blob_file;
} function b64toBlob(b64Data, contentType, sliceSize) { //base64转成二进制对象函数
//来源文档:https://ourcodeworld.com/articles/read/322/how-to-convert-a-base64-image-into-a-image-file-and-upload-it-with-an-asynchronous-form-using-jquery
contentType = contentType || '';
sliceSize = sliceSize || 512; var byteCharacters = atob(b64Data);
var byteArrays = []; for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
var slice = byteCharacters.slice(offset, offset + sliceSize); var byteNumbers = new Array(slice.length);
for (var i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i);
} var byteArray = new Uint8Array(byteNumbers); byteArrays.push(byteArray);
} var blob = new Blob(byteArrays, {type: contentType});
return blob;
}
//////////////////////////////////////////////////////////////
// 名称:压缩图片为base64字符函数
// 使用方法:
// <input type="file" name="pic" onchange="comPrevw(this);">
// <img id="pic-v">
//////////////////////////////////////////////////////////////
function comPrevw(input) {
var file = input.files[0]; console.info(file);
if(!/image\/\w+/.test(file.type)){
alert("只能选择图片文件!");
return false;
}
var quality = 0.5; //定义默认图片压缩后的质量(0~1)
if (file.type=="image/gif") { quality = 1;} //gif只保存第一张图片,所以不压缩 var reader = new FileReader(); reader.onload = function (e) {
var base64IMG = reader.result; img = new Image();
img.onload = function () {
var oWidth = img.width;
var oHeight = img.height;
var Size = calcWH(oWidth, oHeight); //调整为合适的尺寸
//开始进行转换到canvas再压缩操作
var canvas = document.createElement("canvas");
canvas.width = Size.width; //设置画布的宽度
canvas.height = Size.height;//设置画布的高度
var ctx = canvas.getContext("2d");
//ctx.drawImage(图像对象,画点起始Y,画点起始Y,画出宽度,画出高度)//画出宽度和高度决定了你复刻了多少像素,和是画布宽高度是两回事
ctx.drawImage(img,0,0,Size.width,Size.height);
//此时我们可以使用canvas.toBlob(function(blob){ //参数blob就已经是二进制文件了 });来把canvas转回二进制文件,但是我们使用提交表单的时候才即使转换的方式。
var smBase64 = canvas.toDataURL('image/jpeg', quality); //canvas转成新的base64数据,第二个参数为保存质量
document.getElementById(input.name + '-v').src = smBase64; //赋值压缩后的base64图像
};
img.src = base64IMG; //这个可以放在onload后面的
}
reader.readAsDataURL(file); //onload函数会在触发的时候才会执行
}
/*竖立形的手机图片压缩到高度为1000px,横幅型的图片压缩到宽度为1024px*/
function calcWH(ow, oh) {
if (ow<1024 && oh<1000) {
return {width: ow, height: oh};
}
if (ow>oh) { //横幅型 >1024px
var height = Math.ceil(1024 / ow * oh); //向上取整
return {width: 1024, height: height};
}else{ //竖立型或正方形 >1000px
var width = Math.ceil(1000 / oh * ow);
return {width: width, height: 1000};
}
}

imagebb.js


////////////////////////////////////////////////////////////////////////////////////////////////
// 名称: base64图片转二进制文件函数
// 作者: 郭椿安 日期:2018-02-12 //
// 用法: var blobImg = baseSrc2Blob($("#imgId").attr('src')); //这个图片的src值必须是base64字符
// fData.set("文件key", blobImg, $("IMG_input").val()); //第三个参数为传送文件名称,如 20158.jpg
//////////////////////////////////////////////////////////////////////////////////////////////// function baseSrc2Blob(img64Str) { //处理图片base64字符,然后调用转换为二进制函数并返回文件 var block = img64Str.split(";"); // Split the base64 string in data and contentType
var contentType = block[0].split(":")[1];// In this case "image/gif" //Get the content type
var realData = block[1].split(",")[1];// In this case "iVBORw0KGg...." //get the real base64 content of the file
var blob_file = b64toBlob(realData, contentType);// Convert to blob //转成二级制原始文件内容
return blob_file;
} function b64toBlob(b64Data, contentType, sliceSize) { //base64转成二进制对象函数
//来源文档:https://ourcodeworld.com/articles/read/322/how-to-convert-a-base64-image-into-a-image-file-and-upload-it-with-an-asynchronous-form-using-jquery
contentType = contentType || '';
sliceSize = sliceSize || 512; var byteCharacters = atob(b64Data);
var byteArrays = []; for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
var slice = byteCharacters.slice(offset, offset + sliceSize); var byteNumbers = new Array(slice.length);
for (var i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i);
} var byteArray = new Uint8Array(byteNumbers); byteArrays.push(byteArray);
} var blob = new Blob(byteArrays, {type: contentType});
return blob;
}
//////////////////////////////////////////////////////////////
// 名称:压缩图片为base64字符函数
// 使用方法:
// <input type="file" name="pic" onchange="comPrevw(this);">
// <img id="pic-v">
//////////////////////////////////////////////////////////////
function comPrevw(input) {
var file = input.files[0]; console.info(file);
if(!/image\/\w+/.test(file.type)){
alert("只能选择图片文件!");
return false;
}
var quality = 0.5; //定义默认图片压缩后的质量(0~1)
if (file.type=="image/gif") { quality = 1;} //gif只保存第一张图片,所以不压缩 var reader = new FileReader(); reader.onload = function (e) {
var base64IMG = reader.result; img = new Image();
img.onload = function () {
var oWidth = img.width;
var oHeight = img.height;
var Size = calcWH(oWidth, oHeight); //调整为合适的尺寸
//开始进行转换到canvas再压缩操作
var canvas = document.createElement("canvas");
canvas.width = Size.width; //设置画布的宽度
canvas.height = Size.height;//设置画布的高度
var ctx = canvas.getContext("2d");
//ctx.drawImage(图像对象,画点起始Y,画点起始Y,画出宽度,画出高度)//画出宽度和高度决定了你复刻了多少像素,和是画布宽高度是两回事
ctx.drawImage(img,0,0,Size.width,Size.height);
//此时我们可以使用canvas.toBlob(function(blob){ //参数blob就已经是二进制文件了 });来把canvas转回二进制文件,但是我们使用提交表单的时候才即使转换的方式。
var smBase64 = canvas.toDataURL('image/jpeg', quality); //canvas转成新的base64数据,第二个参数为保存质量
document.getElementById(input.name + '-v').src = smBase64; //赋值压缩后的base64图像
};
img.src = base64IMG; //这个可以放在onload后面的
}
reader.readAsDataURL(file); //onload函数会在触发的时候才会执行
}
/*竖立形的手机图片压缩到高度为1000px,横幅型的图片压缩到宽度为1024px*/
function calcWH(ow, oh) {
if (ow<1024 && oh<1000) {
return {width: ow, height: oh};
}
if (ow>oh) { //横幅型 >1024px
var height = Math.ceil(1024 / ow * oh); //向上取整
return {width: 1024, height: height};
}else{ //竖立型或正方形 >1000px
var width = Math.ceil(1000 / oh * ow);
return {width: width, height: 1000};
}
}

前端JS转图片为base64并压缩、调整尺寸脚本的更多相关文章

  1. 使用HTML5的两个api,前端js完成图片压缩

    主要用了两个html5的 API,一个file,一个canvas,压缩主要使用cnavas做的,file是读取文件,之后把压缩好的照片放入内存,最后内存转入表单下img.src,随着表单提交. 照片是 ...

  2. 前端JS利用canvas的drawImage()对图片进行压缩

    对于大尺寸图片的上传,在前端进行压缩除了省流量外,最大的意义是极大的提高了用户体验. 这种体验包括两方面: 1.由于上传图片尺寸比较小,因此上传速度会比较快,交互会更加流畅,同时大大降低了网络异常导致 ...

  3. vue2.X + HTML5 plus 拍照和调用设备相册 另附 图片转base64和压缩图片方法

    HTML5 部分 <button @click="tesCamera()" type="button" :disabled="isshStatu ...

  4. js,JQ 图片转换base64 base64转换为file对象,blob对象

    //将图片转换为Base64 function getImgToBase64(url,callback){ var canvas = document.createElement('canvas'), ...

  5. js将图片转为base64编码,以字符串传到后台存入数据库

    (前台在中approve_edit.html中,后台不变) 链接参考:http://www.cnblogs.com/Strom-HYL/p/6782176.html 该链接文中并没有用到easyUI的 ...

  6. 使用JS将图片转为Base64

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. js 选择图片生成base64数据

    <!doctype html> <html> <head> <meta charset="utf-8"> <meta http ...

  8. JS 获取图片的base64编码

    获取图片的base64编码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...

  9. js图片转base64并压缩

    /* 2015-09-28 上传图片*/ function convertImgToBase64(url, callback, outputFormat){ var canvas = document ...

随机推荐

  1. @Inherited:允许子类继承父类的注解。

    在看定义注解的相关文章的时候,看到这个@Inherited注解,简单的说明并没有真正搞懂是什么意思.在网上搜索了一些相关的内容,现在把一篇文章转载过来.以便后面使用. 文章出处,转载地址:(http: ...

  2. 【ACM】取石子 - 博弈论

    取石子(一) 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 一天,TT在寝室闲着无聊,和同寝的人玩起了取石子游戏,而由于条件有限,他/她们是用旺仔小馒头当作石子.游 ...

  3. 转 基于MySQL MEB的备份恢复

    几种备份方式的介绍 mysqlbackup是一个热备份工具.也就是说它不像mysqldump那样给表上一个全局锁,由于mysqldump上了这个锁,所以就造成客户端只能对 数据库进行读操作不能写,这也 ...

  4. HDU 5445——Food Problem——————【多重背包】

    Food Problem Time Limit: 3000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)To ...

  5. c# string.format 的简写 $

    var name = "huchao"; var info = $"你是谁,我叫:{name}"; Console.Write(info); Console.R ...

  6. 在Controller方法执行之前进行捕获请求,进行类型的转换

    @ExceptionHandler(TypeMismatchException.class) public ModelAndView ParseException(Excetion ex,HttpSe ...

  7. 我对USB的认识

    一.USB协议规范 (1)      基本概念   每一个设备(device)会有一个或者多个的逻辑连接点在里面,每个连接点叫endpoint.每个endpoint有四种数据传送方式:控制(Contr ...

  8. 虚拟机安装CentOS7 Minimal、jdk和hadoop

    虚拟机安装CentOS7 Minimal.jdk和hadoop Table of Contents 1. 安装版本 2. PD安装 3. vim安装和配置 4. 主机名变为bogon的解决办法 5. ...

  9. js和jq获取父,兄弟,子节点

    1,js获取节点: 父: parentNode 获取已知节点的父节点. 子: childNodes; 得到全部子节点 children 得到全部子节点 firstChild 获得第一个子节点 last ...

  10. JSP对象和JavaBean

    1. JSP 客户端请求 当浏览器请求一个网页时,它会向网络服务器发送一系列不能被直接读取的信息,因为这些信息是作为HTTP信息头的一部分来传送的,如下图所示: Http请求头对应的内容如下: 对应方 ...