导航:首页 > 文件处理 > jsbase64压缩图片

jsbase64压缩图片

发布时间:2022-11-19 12:51:19

① js 将base64转回图片格式

直接上代码:

var img = "imgurl";//imgurl 就是你的图片路径

function getBase64Image(img) {
var canvas = document.createElement("canvas");
canvas.width = img.width;
canvas.height = img.height;
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0, img.width, img.height);
var ext = img.src.substring(img.src.lastIndexOf(".")+1).toLowerCase();
var dataURL = canvas.toDataURL("image/"+ext);
return dataURL;
}

var image = new Image();
image.src = img;
image.onload = function(){
var base64 = getBase64Image(image);
console.log(base64);
}

② js base64转图片

可以处理,不过效率比较低
eugeneware/jpeg-js这个是JPG的编码,要用canvas获取到位图然后再算法重编码就行了
具体的代码里面都有,在encode的最下面

③ js把页面图片打包成zip格式

<!DOCTYPEhtml>
<html>
<head>
<metacharset="utf-8"/>
<title></title>
<style>
img{
width:200px;
height:150px;
}
</style>
</head>
<body>

<imgsrc="http://pic.pptbz.com/201506/2015070581208537.JPG"/>
<imgsrc="http://img.taopic.com/uploads/allimg/121014/234931-1210140JK414.jpg"/>
<imgsrc="http://img.zcool.cn/community/.jpg"/>
<imgsrc="http://img.zcool.cn/community/.jpg"/>
<br/><br/>
<buttononclick="packageImages()">packageImages</button><spanid="status"></span><br/><br/>

<scripttype="text/javascript"src="js/jquery.min.js"></script>
<scripttype="text/javascript"src="js/jszip.min.js"></script>
<scripttype="text/javascript"src="js/FileSaver.js"></script>
<scripttype="text/javascript">
functionpackageImages(){
$('#status').text('处理中。。。。。');

varimgs=$('img');

varimgsSrc=[];
varimgBase64=[];
varimageSuffix=[];//图片后缀
varzip=newJSZip();
zip.file("readme.txt","案件详情资料 ");
varimg=zip.folder("images");

for(vari=0;i<imgs.length;i++){
varsrc=imgs[i].getAttribute("src");
varsuffix=src.substring(src.lastIndexOf("."));
imageSuffix.push(suffix);

getBase64(imgs[i].getAttribute("src"))
.then(function(base64){
imgBase64.push(base64.substring(22));

//console.log(base64);//处理成功打印在控制台
},function(err){
console.log(err);//打印异常信息
});

}
functiontt(){
setTimeout(function(){
if(imgs.length==imgBase64.length){
for(vari=0;i<imgs.length;i++){
img.file(i+imageSuffix[i],imgBase64[i],{base64:true});
}
zip.generateAsync({type:"blob"}).then(function(content){
//seeFileSaver.js
saveAs(content,"images.zip");
});
$('#status').text('处理完成。。。。。');

}else{
//console.log('imgs.length:'+imgs.length+',imgBase64.length:'+imgBase64.length);
$('#status').text('已完成:'+imgBase64.length+'/'+imgs.length);
tt();
}
},100);

}
tt();

}

//传入图片路径,返回base64
functiongetBase64(img){
functiongetBase64Image(img,width,height){//width、height调用时传入具体像素值,控制大小,不传则默认图像大小
varcanvas=document.createElement("canvas");
canvas.width=width?width:img.width;
canvas.height=height?height:img.height;

varctx=canvas.getContext("2d");
ctx.drawImage(img,0,0,canvas.width,canvas.height);
vardataURL=canvas.toDataURL();
returndataURL;
}
varimage=newImage();
image.crossOrigin='Anonymous';
image.src=img;
vardeferred=$.Deferred();
if(img){
image.onload=function(){
deferred.resolve(getBase64Image(image));//将base64传给done上传处理
}
returndeferred.promise();//问题要让onload完成后再returnsessionStorage['imgTest']
}
}

</script>
</body>
</html>

④ js 进行参数传递 但是参数中包含文字和图片 怎么把图片转成base64或者二进制呢

有一个问题需要弄清楚,才能更准确地回答你的这个问题:


你的图片最后是用来做什么的呢?


这个图片是用来上传?还是用来在浏览器上显示?


如果是用来上传,要知道base64的图片太大之后,格式很容易出错,不建议这么做,而这么做的人怕是也不好找。


如果是在浏览器上显示,你只要传这个图片的URL就可以了,URL本身就是一个字符串,然后使用JS将图片显示到页面上去,这个方法有许多种。


另外,如果你是想要将一个图片转成base64,需要这个工具的话,这里有一个,不过只不过是工具,不能传入到JS里自动转换的。

⑤ 小程序 使用upng.js 把小程序选择的图片转换为base64

有时候会遇到后端需要前端获取的图片文件转换成base64,在传给后台

小程序有专门的选择图片接口,

wx.chooseImage(OBJECT)

但是这个只是返回一个图片的临时路径,并不是文件数据本身。

小程序暂时没有接口直接转base64的

所以我们需要使用canvas和canvasGetImageData(小程序版本1.9.0以后要才有)先获取图片内容,

再通过插件upng.js插件实现图片转base64(所需插件文件附件中)

1. 把upng.js和pako.min.js文件放到项目中

2. 在pages下的页面js文件中导入

var upng = require('../../utils/upng.js');

这里只需要导入npng.js ,pako.min.js是在npng,js里面调用

3. 建一个canvas

chooseImage">人脸测试  

// 画布

// 生成base64位图片展示 变量imgbase64

need-to-insert-img

4. 添加js点击chooseImage事件

chooseImage: function() {

        var that = this;

        var coss_signature = wx.getStorageSync('cos_signature');

        var canvasID = "imgCanvas";

        var canvas = wx.createCanvasContext(canvasID)

        wx.chooseImage({

            sourceType: ['album', 'camera'],

            sizeType: ['original'],

            count: 1,

            success: function (res) {

                var tempFilePaths = res.tempFilePaths;

                // 获取文件路径

                var filePath = tempFilePaths[0];

                // 1. 绘制图片至canvas

                canvas.drawImage(filePath, 0, 0, 300, 200)

                // 绘制完成后执行回调,API 1.7.0

                canvas.draw(false, function(res){

                    // 2. 获取图像数据, API 1.9.0

                    wx.canvasGetImageData({

                        canvasId: canvasID,

                        x: 0,

                        y: 0,

                        width: 300,

                        height: 200,

                        success(res) {

                          // 3. png编码

                          let pngData = upng.encode([res.data.buffer], res.width, res.height)

                          // 4. base64编码

                          let base64 = wx.arrayBufferToBase64(pngData)

                          // ...

                          that.setData({

                            imgbase64: base64

                          })

                        }

                    })

                })

            }

        })

    }

5. 实现

need-to-insert-img

need-to-insert-img

tips

画布画的图片的长和宽是固定的,这个按照自己需求设置。

可以通过小程序的

wx.getImageInfo(OBJECT)

获取长和宽

相关链接

upng.js:  https://github.com/photopea/UPNG.js

wx-cardscanner:  https://github.com/zh8637688/wx-cardscanner 有时候会遇到后端需要前端获取的图片文件转换成base64,在传给后台

小程序有专门的选择图片接口,

但是这个只是返回一个图片的临时路径,并不是文件数据本身。

小程序暂时没有接口直接转base64的

所以我们需要使用canvas和canvasGetImageData(小程序版本1.9.0以后要才有)先获取图片内容,

再通过插件upng.js插件实现图片转base64(所需插件文件附件中)

1. 把upng.js和pako.min.js文件放到项目中

2. 在pages下的页面js文件中导入

var upng = require('../../utils/upng.js');

这里只需要导入npng.js ,pako.min.js是在npng,js里面调用

3. 建一个canvas

chooseImage">人脸测试  

// 画布

// 生成base64位图片展示 变量imgbase64

4. 添加js点击chooseImage事件

chooseImage: function() {

        var that = this;

        var coss_signature = wx.getStorageSync('cos_signature');

        var canvasID = "imgCanvas";

        var canvas = wx.createCanvasContext(canvasID)

        wx.chooseImage({

            sourceType: ['album', 'camera'],

            sizeType: ['original'],

            count: 1,

            success: function (res) {

                var tempFilePaths = res.tempFilePaths;

                // 获取文件路径

                var filePath = tempFilePaths[0];

                // 1. 绘制图片至canvas

                canvas.drawImage(filePath, 0, 0, 300, 200)

                // 绘制完成后执行回调,API 1.7.0

                canvas.draw(false, function(res){

                    // 2. 获取图像数据, API 1.9.0

                    wx.canvasGetImageData({

                        canvasId: canvasID,

                        x: 0,

                        y: 0,

                        width: 300,

                        height: 200,

                        success(res) {

                          // 3. png编码

                          let pngData = upng.encode([res.data.buffer], res.width, res.height)

                          // 4. base64编码

                          let base64 = wx.arrayBufferToBase64(pngData)

                          // ...

                          that.setData({

                            imgbase64: base64

                          })

                        }

                    })

                })

            }

        })

    }

5. 实现

tips

画布画的图片的长和宽是固定的,这个按照自己需求设置。

可以通过小程序的

获取长和宽

相关链接

upng.js:  https://github.com/photopea/UPNG.js

wx-cardscanner:  https://github.com/zh8637688/wx-cardscanner

⑥ 怎么用JavaScript在线压缩图片

主要用了两个html5的 API,一个file,一个canvas,压缩主要使用cnavas做的,file是读取文件,之后把压缩好的照片放入内存,最后内存转入表单下img.src,随着表单提交。
照片是自己用单反拍的,5M多,压缩下面3张分别是600多kb,400多kb,300kb的最后那张失真度很大了,压缩效率蛮高的。

<!DOCTYPE html>
<html><head> <meta charset="utf-8"/> <title>File API Test</title> <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script> <script type="text/javascript" src="js/JIC.js"></script> <style> #test{ display: none; } </style></head><body><input type="file" id="fileImg" ><form> <img src="" id="test" alt=""></form><script> function handleFileSelect (evt) { // var filebtn = document.getElementById(id); // console.log(filebtn); // var files = filebtn.target.files; // console.log(filebtn.target); // console.log(files); var files = evt.target.files; for (var i = 0, f; f = files[i]; i++) { // Only process image files. if (!f.type.match('image.*')) { continue; } var reader = new FileReader(); // Closure to capture the file information. reader.onload = (function(theFile) { return function(e) { // Render thumbnail. // console.log(evt.target.files[0]); // console.log(e.target); console.log(e.target.result); var i = document.getElementById("test"); i.src = event.target.result; console.log($(i).width()); console.log($(i).height()); $(i).css('width',$(i).width()/10+'px'); //$(i).css('height',$(i).height()/10+'px'); console.log($(i).width()); console.log($(i).height()); var quality = 50; i.src = jic.compress(i,quality).src; console.log(i.src); i.style.display = "block"; }; })(f); // Read in the image file as a data URL. reader.readAsDataURL(f); } } document.getElementById('fileImg').addEventListener('change', handleFileSelect, false);</script></body></html>

var jic = { /** * Receives an Image Object (can be JPG OR PNG) and returns a new Image Object compressed * @param {Image} source_img_obj The source Image Object * @param {Integer} quality The output quality of Image Object * @return {Image} result_image_obj The compressed Image Object */ compress: function(source_img_obj, quality, output_format){ var mime_type = "image/jpeg"; if(output_format!=undefined && output_format=="png"){ mime_type = "image/png"; } var cvs = document.createElement('canvas'); //naturalWidth真实图片的宽度 cvs.width = source_img_obj.naturalWidth; cvs.height = source_img_obj.naturalHeight; var ctx = cvs.getContext("2d").drawImage(source_img_obj, 0, 0); var newImageData = cvs.toDataURL(mime_type, quality/100); var result_image_obj = new Image(); result_image_obj.src = newImageData; return result_image_obj; }, function ****(***)

⑦ js怎么把base64的字符串转换成图片

C#的转换, JS 就不清楚啦, 希望对楼主有帮助
private void button2_Click(object sender, EventArgs e)
{
OpenFileDialog dlg = new OpenFileDialog();
dlg.Title = "选择要转换的base64编码的文本";
dlg.Filter = "txt files|*.txt";
if (DialogResult.OK == dlg.ShowDialog())
{
Base64StringToImage(dlg.FileName);
}
}

⑧ js base64与canvas base64

获取到上传的文件myfile,创建一个fileRead文件对象,使用readAsDataURL方法可以将读取到的文件编码成Data URL。文件加载成功后,e.target.result就是文件图片所对应的base64编码。直接赋值给img的src,就能显示图片。

下面是onload里e对象打印的结果,可以看出e.target.result是文件图片的信息。

下面打印的是base64的编码,可以在img的src中直接引用,或者复制到浏览器搜索框里也能直接搜索图片。

使用canvas画一个填充色为红色的矩形,试点按钮后,使用canvas.toDataURL方法:返回一个包含图片展示的 data URI 。可以使用type参数其类型,默认为 PNG 格式。把得到的base64编码赋给img的src,显示图片。

结果图如下:

两种图片的base64的方法都很实用,项目开发中可能会遇到,今天来分享给大家。

⑨ js如何将base64格式图片保存到服务器

下面一小段代码给大家分享Nodejs把接收图片base64格式保存为文件存储到服务器上的方法,具体代码如下所示:
app.post('/upload', function(req, res){
//接收前台POST过来的base64
var imgData = req.body.imgData;
//过滤data:URL
var base64Data = imgData.replace(/^data:image\/\w+;base64,/, "");
var dataBuffer = new Buffer(base64Data, 'base64');
fs.writeFile("image.png", dataBuffer, function(err) {
if(err){
res.send(err);
}else{
res.send("保存成功!");
}
});
});

阅读全文

与jsbase64压缩图片相关的资料

热点内容
dvd光盘存储汉子算法 浏览:757
苹果邮件无法连接服务器地址 浏览:963
phpffmpeg转码 浏览:671
长沙好玩的解压项目 浏览:145
专属学情分析报告是什么app 浏览:564
php工程部署 浏览:833
android全屏透明 浏览:737
阿里云服务器已开通怎么办 浏览:803
光遇为什么登录时服务器已满 浏览:302
PDF分析 浏览:485
h3c光纤全工半全工设置命令 浏览:143
公司法pdf下载 浏览:382
linuxmarkdown 浏览:350
华为手机怎么多选文件夹 浏览:683
如何取消命令方块指令 浏览:349
风翼app为什么进不去了 浏览:778
im4java压缩图片 浏览:362
数据查询网站源码 浏览:150
伊克塞尔文档怎么进行加密 浏览:892
app转账是什么 浏览:163