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