前端JS转图片为base64并压缩、调整尺寸脚本
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并压缩、调整尺寸脚本的更多相关文章
- 使用HTML5的两个api,前端js完成图片压缩
主要用了两个html5的 API,一个file,一个canvas,压缩主要使用cnavas做的,file是读取文件,之后把压缩好的照片放入内存,最后内存转入表单下img.src,随着表单提交. 照片是 ...
- 前端JS利用canvas的drawImage()对图片进行压缩
对于大尺寸图片的上传,在前端进行压缩除了省流量外,最大的意义是极大的提高了用户体验. 这种体验包括两方面: 1.由于上传图片尺寸比较小,因此上传速度会比较快,交互会更加流畅,同时大大降低了网络异常导致 ...
- vue2.X + HTML5 plus 拍照和调用设备相册 另附 图片转base64和压缩图片方法
HTML5 部分 <button @click="tesCamera()" type="button" :disabled="isshStatu ...
- js,JQ 图片转换base64 base64转换为file对象,blob对象
//将图片转换为Base64 function getImgToBase64(url,callback){ var canvas = document.createElement('canvas'), ...
- js将图片转为base64编码,以字符串传到后台存入数据库
(前台在中approve_edit.html中,后台不变) 链接参考:http://www.cnblogs.com/Strom-HYL/p/6782176.html 该链接文中并没有用到easyUI的 ...
- 使用JS将图片转为Base64
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- js 选择图片生成base64数据
<!doctype html> <html> <head> <meta charset="utf-8"> <meta http ...
- JS 获取图片的base64编码
获取图片的base64编码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...
- js图片转base64并压缩
/* 2015-09-28 上传图片*/ function convertImgToBase64(url, callback, outputFormat){ var canvas = document ...
随机推荐
- 注意sqlite3和java的整数数据类型的区别
作为新手的我,没有考虑数据库和java的数据类型的对应上的区别: sqlite3的数据类型和java数据类型对应上要小心,特别是整数类型. java 中int类型4位存储,范围 -2^31到2^31- ...
- windows中以管理员身份运行cmd
开始->所有程序->附件->命令提示符->右键,以管理员身份运行(win10可以直接搜索cmd,右键,以管理员身份运行)
- JAVA多线程之线程池的使用
合理利用线程池能够带来三个好处. 第一:降低资源消耗.通过重复利用已创建的线程降低线程创建和销毁造成的消耗. 第二:提高响应速度.当任务到达时,任务可以不需要等到线程创建就能立即执行. 第三:提高线程 ...
- 示例1-苏宁每日自动登录打卡-结合Au3
public class SuningAutoClock { public static void AutoClock() throws IOException, InterruptedExcepti ...
- matlab 基本操作
导入excel 右键excel文件, import data, 选择column vector点击导入即可, 在右侧的workspace就可以看到添加的列变量了 在workspace中右键添加clas ...
- HDU 5445——Food Problem——————【多重背包】
Food Problem Time Limit: 3000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)To ...
- electron 开发记录
判断是否开发环境 安装 electron-is-dev npm install electron-is-dev // main.js const isDev = require('electron-i ...
- Oracle Form个性化案例(一)
业务场景: 现有Form A,需通过A中的菜单栏中调用另一Form B,需将某值作为参数传入Form B中:
- 【iOS学习笔记】改变状态栏字体颜色
Step1. info.plist中设置UIViewControllerBasedStatusBarAppearance为NO Step2. AppDelegate.m中添加 - (BOOL)appl ...
- 画报表框架——Echarts.js
官网:http://echarts.baidu.com/index.html ————————————————————————————————— 先看看我做的第一个柱状图形报表 ——————————— ...