integrated_traffic/src/main/java/com/zcloud/util/ImageAnd64Binary.java

138 lines
3.7 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.zcloud.util;
import org.apache.commons.codec.binary.Base64;
import java.io.*;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
/**
* 说明BASE64处理
* 作者luoxiaobao
* 官网www.qdkjchina.com
*/
public class ImageAnd64Binary {
public static void main(String[] args) {
String imgSrcPath = "H:/1.jpg"; // 生成64编码的图片的路径
String imgCreatePath = "H:/123.png"; // 将64编码生成图片的路径
imgCreatePath = imgCreatePath.replaceAll("\\\\", "/");
System.out.println(imgCreatePath);
String strImg = getImageStr(imgSrcPath);
System.out.println(strImg);
generateImage(strImg, imgCreatePath);
}
/**
* 将图片文件转化为字节数组字符串并对其进行Base64编码处理
*
* @param imgSrcPath
* 生成64编码的图片的路径
* @return
*/
public static String getImageStr(String imgSrcPath) {
InputStream in = null;
byte[] data = null;
// 读取图片字节数组
try {
in = new FileInputStream(imgSrcPath);
data = new byte[in.available()];
in.read(data);
in.close();
} catch (IOException e) {
e.printStackTrace();
}
// 对字节数组Base64编码
return Base64.encodeBase64String(data);// 返回Base64编码过的字节数组字符串
}
/**
* 对字节数组字符串进行Base64解码并生成图片
*
* @param imgStr
* 转换为图片的字符串
* @param imgCreatePath
* 将64编码生成图片的路径
* @return
*/
public static boolean generateImage(String imgStr, String imgCreatePath) {
if (imgStr == null) // 图像数据为空
return false;
try {
// Base64解码
byte[] b = Base64.decodeBase64(imgStr);
for (int i = 0; i < b.length; ++i) {
if (b[i] < 0) {// 调整异常数据
b[i] += 256;
}
}
OutputStream out = new FileOutputStream(imgCreatePath);
out.write(b);
out.flush();
out.close();
return true;
} catch (Exception e) {
return false;
}
}
/**
* 字符串的压缩
*
* @param base64 待压缩的字符串
*
* @return 返回压缩后的字符串
*
* @throws IOException
*/
public static String zipBase64(String base64) throws IOException {
if (null == base64 || base64.length() <= 0) {
return base64;
}
// 创建一个新的 byte 数组输出流
ByteArrayOutputStream out = new ByteArrayOutputStream();
// 使用默认缓冲区大小创建新的输出流
GZIPOutputStream gzip = new GZIPOutputStream( out );
// 将 b.length 个字节写入此输出流
gzip.write( base64.getBytes() );
gzip.close();
// 使用指定的 charsetName通过解码字节将缓冲区内容转换为字符串
return out.toString( "ISO-8859-1" );
}
/**
* 字符串的解压
*
* @param zipBase64 需要解压的字符串
*
* @return 返回解压缩后的字符串
*
* @throws IOException
*/
public static String upZip(String zipBase64) throws IOException {
if (null == zipBase64 || zipBase64.length() <= 0) {
return zipBase64;
}
// 创建一个新的 byte 数组输出流
ByteArrayOutputStream out = new ByteArrayOutputStream();
// 创建一个 ByteArrayInputStream使用 buf 作为其缓冲区数组
ByteArrayInputStream in = new ByteArrayInputStream( zipBase64.getBytes( "ISO-8859-1" ) );
// 使用默认缓冲区大小创建新的输入流
GZIPInputStream gzip = new GZIPInputStream( in );
byte[] buffer = new byte[256];
int n = 0;
while ((n = gzip.read( buffer )) >= 0) {// 将未压缩数据读入字节数组
// 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此 byte数组输出流
out.write( buffer, 0, n );
}
// 使用指定的 charsetName通过解码字节将缓冲区内容转换为字符串
return out.toString( "ISO-8859-1" );
}
}