⑴ 如何有效提高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>