是生成了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;
}
}
}