【精·超详细】Java实现图片和Base64之间的相互转化(一看就会)
Base64
package com.zzhua;
import org.junit.Test;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import java.io.IOException;
import java.text.ParseException;
import java.util.Base64;
public class Base64Test{
@Test
public void test_01() throws ParseException {
byte[] encode = Base64.getEncoder().encode("zzhua:123456".getBytes());
String s = new String(encode);
System.out.println(s); // enpodWE6MTIzNDU2
byte[] decode = Base64.getDecoder().decode(s.getBytes());
System.out.println(new String(decode)); // zzhua:123456
}
@Test
public void test_02() throws ParseException, IOException {
String encode = new BASE64Encoder().encode("zzhua:123456".getBytes());
System.out.println(encode); // enpodWE6MTIzNDU2
byte[] bytes = new BASE64Decoder().decodeBuffer(encode);
System.out.println(new String(bytes)); // zzhua:123456
}
}
图片转Base64字符串互转
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.util.Base64;
public class ImageUtil {
/**
* 图片转Base64字符串
* @param imageFileName
* @return
*/
public static String convertImageToBase64Str(String imageFileName) {
ByteArrayOutputStream baos = null;
try {
//获取图片类型
String suffix = imageFileName.substring(imageFileName.lastIndexOf(".") + 1);
//构建文件
File imageFile = new File(imageFileName);
//通过ImageIO把文件读取成BufferedImage对象
BufferedImage bufferedImage = ImageIO.read(imageFile);
//构建字节数组输出流
baos = new ByteArrayOutputStream();
//写入流
ImageIO.write(bufferedImage, suffix, baos);
//通过字节数组流获取字节数组
byte[] bytes = baos.toByteArray();
//获取JDK8里的编码器Base64.Encoder转为base64字符
return Base64.getEncoder().encodeToString(bytes);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (baos != null) {
baos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
/**
* Base64字符串转图片
* @param base64String
* @param imageFileName
*/
public static void convertBase64StrToImage(String base64String, String imageFileName) {
ByteArrayInputStream bais = null;
try {
//获取图片类型
String suffix = imageFileName.substring(imageFileName.lastIndexOf(".") + 1);
//获取JDK8里的解码器Base64.Decoder,将base64字符串转为字节数组
byte[] bytes = Base64.getDecoder().decode(base64String);
//构建字节数组输入流
bais = new ByteArrayInputStream(bytes);
//通过ImageIO把字节数组输入流转为BufferedImage
BufferedImage bufferedImage = ImageIO.read(bais);
//构建文件
File imageFile = new File(imageFileName);
//写入生成文件
ImageIO.write(bufferedImage, suffix, imageFile);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (bais != null) {
bais.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
js将图片文件转换为base64字符串
/**
*图片文件转换成BASE64字符串,异步任务
*@param {File} file图片文件对象
*@return {String} BASE64字符串,格式'data:image/jpeg;base64,XXX',期中'jpeg'为图片的格式,'XXX'为BASE64字符串内容,转换失败则返回空字符串
*/
export function convertFileToBase64Str(file) {
// 因为转换是耗时的,用异步任务实现
return new Promise((resovel, reject) => {
const reader = new FileReader()
reader.readAsDataURL(file)
// 加载成功
reader.onload = function() {
resolve(reader.result)
}
// 加载失败
reader.onerror = function(error) {
// reject(error)
resolve('')
}
})
}
UrlEncode
String encode = URLEncoder.encode("文件传输", "UTF-8");
System.out.println(encode); // %E6%96%87%E4%BB%B6%E4%BC%A0%E8%BE%93
String decode = URLDecoder.decode("%E6%96%87%E4%BB%B6%E4%BC%A0%E8%BE%93","UTF-8");
System.out.println(new String(decode)); // 文件传输