⑴ 如何有效提高Base64编码后的文件的压缩比
#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdlib>
using namespace std;
// 初始化工作 , initialize
// 定义查询表 , = 是为了原码不够分配而加上的。
char sz64Table[65] = {'A','B','C','D','E',
'F','G','H','I','J',
'K','L','M','N','O',
'P','Q','R','S','T',
'U','V','W','X','Y',
'Z','a','b','c','d',
'e','f','g','h','i',
'j','k','l','m','n',
'o','p','q','r','s',
't','u','v','w','x',
'y','z','0','1','2',
'3','4','5','6','7',
'8','9','+','/','='
} ;
// 定义 变换函数。
void Encode64 (string strGetStr) // 转换
{
// 判断其长度是否符合要求
int nNumberOfGetStr = 0 ; // 串的长度
int nNeedByte ; // 需要补充的字节数
int nGroup ; // 分组数
nNumberOfGetStr = strGetStr.length ();
if ( nNumberOfGetStr == 0 )
{
cout << "输入串为空!"<< endl;
exit ( 1 ) ;
}
else // 长度不为空,要判断数量是否需要补充
{
nGroup = nNumberOfGetStr / 3 ; // 这里是分组数的初步值
nNeedByte = nNumberOfGetStr % 3 ; // 这里是一个模,用的时候还得注意。
if ( nNeedByte == 1 ) // 模1 说明需要两个
{
nGroup ++ ;
strGetStr.append ("00") ;
}
if ( nNeedByte == 2 ) // 模2说明需要一个补0
{
nGroup ++ ;
strGetStr.append ("0") ;
}
} // if
// 开始分组 , 也就是对每一组都进行变换。
char szTemp[3] ; // 中间过渡
// char * p = new char( nGroup * 4 ); // 因为转换后容量是原来的4/3
char p[300] ;
for ( int i = 0 ; i < nGroup ; i ++ )
{
szTemp[0] = strGetStr.at ( i * 3 + 0) ;
szTemp[1] = strGetStr.at ( i * 3 + 1) ;
szTemp[2] = strGetStr.at ( i * 3 + 2) ;
//第一个输出字节:取第一输入字节的前6位,并且在高位补0,使其变成8位(一个字节)
p[i * 4 + 0] = szTemp[0] >> 2 ;
//第二个输出字节:取第一输入字节的后2位和第二个输入字节的前4位(共6位),并且在高位补0,使其变成8位(一个字节)
p[i * 4 + 1] = ((szTemp[0] & 0x03) << 4) ^ (szTemp[1] >> 4) ;
//第三个输出字节:取第二输入字节的后4位和第三个输入字节的前2位(共6位),并且在高位补0,使其变成8位(一个字节)
if ( szTemp[1] == 48) p[i * 4 + 2] = 64 ; // 48 也就是 0 的ASCII
else p[i * 4 + 2] = ((szTemp[1] & 0x0f) << 2) ^ (szTemp[2] >> 6) ;
//第四个输出字节:取第三输入字节的后6位,并且在高位补0,使其变成8位(一个字节)
if ( szTemp[2] == 48) p[i * 4 + 3] = 64 ;
else p[i * 4 + 3] = szTemp[2] & 0x3f ;
}
for (int j = 0 ; j < nGroup * 4 ; j ++)
{
cout << sz64Table[ p[j] ] ;
}
cout << endl;
}// Encode is over ;
昨天看着一个C#代码改写的,可能有些语法语义的不正确,大家见谅。水平实在是不行,但我写了之后发现如果是对一个字符进行编码的话,会出现问题。
跟其他程序比起来,差了3个位置。比如: 1 编为 :MQ== , 我的编为: MT== 。字符多了就没问题。自己没想明白,谁给审审!
⑵ js zip怎么压缩base64字符串
public class Trans {
public void printNum(int num){
System.out.print(Thread.currentThread());//获取当前运行这个方法的类
for(int i=0;i<25;i++){
System.out.print(i+" ");
}
System.out.println();
}
}
⑶ 如何用nodejs压缩文件,生成tar包
压缩文件可以通过导流一个 fs.ReadStream 到一个 zlib 流,然后到一个 fs.WriteStream 来完成。
inp.pipe(gzip).pipe(out);
一步压缩或解压缩数据可以通过快捷方法来完成。
var buffer = new Buffer('eJzT0yMAAGTvBe8=', 'base64');
zlib.unzip(buffer, function(err, buffer) {
if (!err) {
console.log(buffer.toString());
}
});
要在 HTTP 客户端或服务器中使用此模块解决了。
⑷ 当前使用JS在前端完成图片压缩的有哪些方法
这个base64的编码并不能减小图片,反而增大了,大概增大了1/3。至于有没有其他的方法我就不知道了,不过直接构造Blob对象上传就行了,为什么要上传dataurl
⑸ 如何使用 node.js 生成 zip 压缩包
压缩或解压缩一个文件可以通过导流一个 fs.ReadStream 到一个 zlib 流,然后到一个 fs.WriteStream 来完成。
inp.pipe(gzip).pipe(out);
一步压缩或解压缩数据可以通过快捷方法来完成。
varbuffer=newBuffer('eJzT0yMAAGTvBe8=','base64');
zlib.unzip(buffer,function(err,buffer){
if(!err){
console.log(buffer.toString());
}
});
要在 HTTP 客户端或服务器中使用此模块,请在请求和响应中使用accept-encoding和content-encoding头。
⑹ 如何使用JS将音频文件如何转换成base64格式的
1)使用cmd命令运行 输入cmd进入存.swa 文件的文件夹(进入路径用命令 cd ,例:cd C:\abc) 利用命令 ren *.swa *.mp3,批量转换(*为批量适配符) 2)用万能格式转换工具转换例:WinMPG Video Convert
⑺ 前端把图片压缩转换成base64编码把值赐予input='hidden' 之后提交给后台. HTML5,PHP,javascript,canvas
缺点你无法直接验证传来的base64数据的完整性,比如大小,文件头之类的,还需要自己来实现。
⑻ 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>