直接上代码
package cn.huazx.ebp.common.utils;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class ImageUtils {
//根据文件地址转换为base64编码字符串
public static String getImageStr(String imgFile) {
InputStream inputStream = null;
byte[] data = null;
try {
inputStream = new FileInputStream(imgFile);
data = new byte[inputStream.available()];
inputStream.read(data);
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
//base64编码
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(data);
}
//将base64编码字符串解码成文件并保存
public static boolean generateImage(String img, String imgFilePath) {
if (img == null) {
return false;
}
try {
//base64解码
BASE64Decoder base64Decoder = new BASE64Decoder();
byte[] bytes = base64Decoder.decodeBuffer(img);
for (int i = 0; i < bytes.length; i++) {
if (bytes[i] < 0)//调整异常数据
{
bytes[i] += 256;
}
//生成照片
FileOutputStream fileOutputStream = new FileOutputStream(imgFilePath);
fileOutputStream.write(bytes);
fileOutputStream.flush();
fileOutputStream.close();
}
return true;
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
public static void main(String[] args) {
String imageStr = getImageStr("F:\\10.jpg");
// System.out.println("生成的字符串为" + imageStr);
boolean b = generateImage(imageStr, "F:\\2.jpg");
if (b) {
System.out.println("文件编解码成功!");
} else {
System.out.println("文件编解码失败!");
}
}
}
归纳
编码:先读取文件为二进制数组,再编码为字符串;
解码:将字符串解码为二进制数组,再写入到文件。