前端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 ...
随机推荐
- @Inherited:允许子类继承父类的注解。
在看定义注解的相关文章的时候,看到这个@Inherited注解,简单的说明并没有真正搞懂是什么意思.在网上搜索了一些相关的内容,现在把一篇文章转载过来.以便后面使用. 文章出处,转载地址:(http: ...
- strcpy、strncpy、strlen、memcpy、memset、strcat、strncat、strcmp、strncmp,strchr
1.strcpy #include<stdio.h> #include<assert.h> char *mystrcpy(char *dest, const char *src ...
- Java面向对象_简单工厂模式
概念:由一个工厂对象决定创建出哪一种产品类的实例. public class Practice14 { public static void main(String[] args) { // TODO ...
- DM设备的创建与管理
DM(Device Mapper)即设备映射(逻辑设备). MD和DM是Linux内核上2种工作机制(实现逻辑设备)不同的模块. Physical Volume(PV): 物理卷 底层 ...
- matlab 常用函数(数学建模-复习)
常用函数 fscanf(fid, '%c', inf) -> 直接读取整个文件, 因为inf表示无穷 strtrim char(num): 将num转为ASCII字符 strtok(conten ...
- POJ 1797 ——Heavy Transportation——————【最短路、Dijkstra、最短边最大化】
Heavy Transportation Time Limit:3000MS Memory Limit:30000KB 64bit IO Format:%I64d & %I64 ...
- IE6/7下同级只有一个元素浮动,会换行问题
.myDiv { background-color: red; width: 200px; height: 200px; padding: 10px; } .div1 { background-col ...
- 表格<table>
<table> <tr> <th>表头1</th> <th>表头2</th> <th>表头3</th> ...
- windows安装ipython
一.安装python2.71.下载地址https://www.python.org/downloads/2.安装后修改本地变量-右击电脑-属性-高级系统设置-环境变量-用户变量-新建-变量名:path ...
- uvm_svcmd_dpi——DPI在UVM中的实现(二)
UVM中有需要从cmmand line 输入参数的需求,所有uvm_svcmd_dpi.svh和uvm_svcmd_dpi.cc 文件就是实现功能. uvm_svcmd_dpi.svh的源代码如下,我 ...