方法一:
不太推荐使用
sun.misc.BASE64Decoder;
sun.misc.BASE64Encoder;
/**
* 字符串转图片
* @param imgStr 图片字符串
* @param filename 图片名
* @return
*/
public static boolean generateImage(String imgStr, String filename) {
if (imgStr == null) {
return false;
}
BASE64Decoder decoder = new BASE64Decoder();
try {
// 解密
byte[] b = decoder.decodeBuffer(imgStr);
// 处理数据
for(int i = 0; i < b.length; ++i) {
if (b[i] < 0) {
b[i] += 256;
}
}
OutputStream out = new FileOutputStream("D:/a/"+filename);
out.write(b);
out.flush();
out.close();
return true;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
/**
* 图片转字符串
* @param filePath 文件路径
* @return
*/
public static String getImageStr(String filePath) {
InputStream inputStream = null;
byte[] data = null;
try {
inputStream = new FileInputStream(filePath);
data = new byte[inputStream.available()];
inputStream.read(data);
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
// 加密
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(data);
}
/*
* 测试代码
*/
public static void main(String[] args) {
String imageStr = getImageStr("D:\\001.jpg");
System.out.println(imageStr);
boolean generateImage = generateImage(imageStr, "001.jpg");
System.out.println(generateImage);
}
打印字符串:
/9j/4AAQSkZJRgABAQEA8ADwAAD/4gxYSUNDX1BST0ZJTEUAAQEAAAxITGlubwIQAABtbnRyUkdC
IFhZWiAHzgACAAkABgAxAABhY3NwTVNGVAAAAABJRUMgc1JHQgAAAAAAAAAAAAAAAAAA9tYAAQAA
AADTLUhQICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFj
cHJ0AAABUAAAADNkZXNjAAABhAAAAGx3dHB0AAAB8AAAABRia3B0AAACBAAAABRyWFlaAAACGAAA
ABRnWFlaAAACLAAAABRiWFlaAAACQAAAABRkbW5kAAACVAAAAHBkbWRkAAACxAAAAIh2dWVkAAAD
TAAAAIZ2aWV3AAAD1AAAACRsdW1pAAAD+AAAABRtZWFzAAAEDAAAACR0ZWNoAAAEMAAAAAxyVFJD
AAAEPAAACAxnVFJDAAAEPAAACAxiVFJDAAAEPAAACAx0ZXh0AAAAAENvcHlyaWdodCAoYykgMTk5
OCBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQAAZGVzYwAAAAAAAAASc1JHQiBJRUM2MTk2Ni0yLjEA
。。。。。。。。太多不贴了
true
方法二:(推荐)
/**
* 字符串转图片.
* @param imgStr 图片字符串
* @param outPutFilePath 图片名
* @return boolean
* @throws IOException IO Exception
*/
public static boolean generateImage(final String imgStr, final String outPutFilePath) throws IOException {
if (imgStr == null) {
return false;
}
OutputStream out = null;
try {
final Base64.Decoder decoder = Base64.getDecoder();
//解码
byte[] b = decoder.decode(imgStr);
out = new FileOutputStream(outPutFilePath);
out.write(b);
out.flush();
out.close();
return true;
} catch (IOException e) {
logUtils.logError("Error location:NotesUtils.generateImage()", e);
throw e;
} finally {
if(out != null) {
out.close();
}
}
}
/**
* 图片转字符串.
* @param stream 文件路径
* @return String
*/
public static String getImageStr(final InputStream stream) {
InputStream inputStream = stream;
byte[] data = null;
try {
data = new byte[inputStream.available()];
inputStream.read(data);
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
final Base64.Encoder encoder = Base64.getEncoder();
//编码
final String encodedText = encoder.encodeToString(data);
System.out.println(encodedText);
return encodedText;
}
//测试
public static void main(String[] agrs) {
File file = new File("c:\\a.jpg");
InputStream stream;
try {
stream = new FileInputStream(file);
String imgStr = getImageStr(stream);
System.out.println(imgStr);
generateImage(imgStr, "c:\\b.jpg");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
核心代码:
final Base64.Decoder decoder = Base64.getDecoder();
final Base64.Encoder encoder = Base64.getEncoder();
final String text = "字串文字";
final byte[] textByte = text.getBytes("UTF-8");
//编码
final String encodedText = encoder.encodeToString(textByte);
System.out.println(encodedText);
//解码
System.out.println(new String(decoder.decode(encodedText), "UTF-8"));
注意!!!
如果你是jdk8 请使用
Base64.getMimeDecoder();
Base64.getMimeEncoder();
java8 中有Base64.getMimeDecoder() 或者 Base64.getMimeEncoder()方法,可以解决编码换行的问题,是可以兼容JDK7的
原因请参考文章
https://blog.csdn.net/java_4_ever/article/details/80978089#commentsedit