導航:首頁 > 文件處理 > base64壓縮

base64壓縮

發布時間:2022-01-26 01:17:57

java怎樣壓縮base64編碼的字元串

是生成了base64字元串,要壓縮 ? 那可以使用zip輸出流去壓縮

~~~~~

❷ 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();
}
}

❸ 把純文本字元串用Gzip壓縮再轉換為Base64能有多少壓縮率

其實具體多大壓縮率要看源文件的內容,一般來說重復的單詞越多,壓縮率越高。

下面是把/usr/share/dict/words壓縮的測試程序

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.zip.GZIPOutputStream;

import org.apache.commons.codec.binary.Base64;

public class GzipBase64Tests {

public static void main(String[] args) throws Exception {
File input = new File("/Users/matianyi/input.txt");
File output = new File("/Users/matianyi/output.txt");

if (!input.exists()) {
System.out.println("input file not exists!");
return;
}

if (output.exists()) {
output.delete();
}

ByteArrayOutputStream buffer = new ByteArrayOutputStream();
GZIPOutputStream gout = new GZIPOutputStream(buffer);

FileInputStream in = new FileInputStream(input);

long t1 = System.currentTimeMillis();
byte[] buf = new byte[1024];
int total=0;
int rd;
while ((rd = in.read(buf)) != -1) {
total += rd;
gout.write(buf,0, rd);
}

gout.close();
in.close();

byte[] result = buffer.toByteArray();

long t2 = System.currentTimeMillis();
String base64 = Base64.encodeBase64String(result);
long t3 = System.currentTimeMillis();

System.out.printf("raw %d -> gzip %d -> base64 %d, time1 %dms, time2 %dms", total, result.length, base64.length(), t2-t1, t3-t2);
}
}

輸出為: raw 2493109 -> gzip 753932 -> base64 1005244, time1 225ms, time2 43ms

壓縮了50%。

❹ 如何有效提高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== 。字元多了就沒問題。自己沒想明白,誰給審審!

❺ 如何在前端解壓縮獲得的base64Binary字元串

應該對整個輸出進行gzip壓縮,同時設置好Content-Encoding
gzip,而不是單單壓縮部分返回的內容,部分壓縮瀏覽器不會加壓

自己看http://download.csdn.net/download/bljbljbljblj/2744049這個類庫是否能解壓,不能自己按照gzip原理自己寫代碼了,要不就不要壓縮

❻ 前端把圖片壓縮轉換成base64編碼把值賜予input='hidden' 之後提交給後台. HTML5,php,Javascript,canvas

缺點你無法直接驗證傳來的base64數據的完整性,比如大小,文件頭之類的,還需要自己來實現。

❼ 如何解決圖像經Base64編譯後文件增大過多的問題

LZ不用指望用各種辦法壓縮之後的大小比原圖片還小,因為jpeg、png等格式原本就是壓縮過的格式。那麼壓縮空間基本就在這多出來的1/3裡面,我覺得這1/3的代碼基本可以接受。畢竟再加上復雜的演算法做更復雜的壓縮格式,在解壓的時候也是個時間上的代價。

❽ php 怎麼將二進制流轉換為base64編碼

沒有特別作用,因為任何人只要想解都能解開。 BASE64 是將二進制數據 (8位)編碼為64個可顯示的 ASCII 字元,3個 octet 編碼成 4 個 octet。因此既不是壓縮,也不是加密。估計把php編碼成base64隻是為了讓人讀起來麻煩一點。

❾ JAVA壓縮至32K以下後的圖片base64碼

Java實現圖片與Base64編碼互轉

importjava.io.FileInputStream;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.OutputStream;
importsun.misc.BASE64Decoder;
importsun.misc.BASE64Encoder;

publicclassBase64Image{
publicstaticvoidmain(String[]args){
//測試從Base64編碼轉換為圖片文件
StringstrImg="自己寫哈";
GenerateImage(strImg,"D:\wangyc.jpg");

//測試從圖片文件轉換為Base64編碼
System.out.println(GetImageStr("d:\wangyc.jpg"));
}

publicstaticStringGetImageStr(StringimgFilePath){//將圖片文件轉化為位元組數組字元串,並對其進行Base64編碼處理
byte[]data=null;

//讀取圖片位元組數組
try{
InputStreamin=newFileInputStream(imgFilePath);
data=newbyte[in.available()];
in.read(data);
in.close();
}catch(IOExceptione){
e.printStackTrace();
}

//對位元組數組Base64編碼
BASE64Encoderencoder=newBASE64Encoder();
returnencoder.encode(data);//返回Base64編碼過的位元組數組字元串
}

(StringimgStr,StringimgFilePath){//對位元組數組字元串進行Base64解碼並生成圖片
if(imgStr==null)//圖像數據為空
returnfalse;
BASE64Decoderdecoder=newBASE64Decoder();
try{
//Base64解碼
byte[]bytes=decoder.decodeBuffer(imgStr);
for(inti=0;i<bytes.length;++i){
if(bytes[i]<0){//調整異常數據
bytes[i]+=256;
}
}
//生成jpeg圖片
OutputStreamout=newFileOutputStream(imgFilePath);
out.write(bytes);
out.flush();
out.close();
returntrue;
}catch(Exceptione){
returnfalse;
}
}
}
閱讀全文

與base64壓縮相關的資料

熱點內容
小時代pdf 瀏覽:219
化工設備第三版答案pdf 瀏覽:465
防火卷簾控制器單片機程序 瀏覽:16
rdlcpdf 瀏覽:109
鏈表實現快速排序python 瀏覽:590
php輸出命令 瀏覽:987
d站app叫什麼名字 瀏覽:172
oppor系列如何解除應用加密 瀏覽:601
程序員那麼可愛姜逸城初戀 瀏覽:499
modbustcp編程 瀏覽:493
實況為什麼安卓看不了 瀏覽:129
Java多線程Queue 瀏覽:95
雲伺服器499元三年 瀏覽:980
nbd源碼 瀏覽:847
x86在arm上編譯 瀏覽:8
linux怎麼配置網路 瀏覽:307
程序員想要的小禮物 瀏覽:187
java獲取網頁url 瀏覽:626
怎麼做解壓神器泡泡版 瀏覽:967
自己動手做一個c編譯器 瀏覽:932