主要分为: ①图片上传后,进行Base64位编码 ②图片进行Base64解码后,再进行下载(否则能下载文件,文件显示错误) ③图片转成Base64位,计算图片的大小(两个方法:一个处理头部的杂乱的数据,另外一个清除== 号的) (jar包在文末)
public class Test {
public static void main(String[] args) {
File file = new File("D:\BaiduNetdiskDownload\test1\1.jpg");
System.out.println("初始图片的大小[字节]:" + file.length());//38,839 字节 > 37.9 KB
String base64Img = imgToBase64(file.toString());
System.out.println("base64位后图片的大小[字节]: " + base64Img.length());//53150
//查看Base64位后的图片
System.out.println(base64Img);
//查看Base64位图片的大小
System.out.println("base64位图片的大小[kb]:" + obtainImageSize1(base64Img));
System.out.println("base64位图片的大小[kb]:" + obtainImageSize2(base64Img));
//下载这个文件
System.out.println(downloadBase64Img(base64Img));//38,839 字节 > 37.9 KB
}
//Base64位图片解码后,再进行下载
public static String downloadBase64Img(String base64Img) {
FileOutputStream outputStream = null;
//解码操作
BASE64Decoder base64Decoder = new BASE64Decoder();
try {
outputStream = new FileOutputStream(new File("D:\666.jpg"));
//对文件进行解码操作
byte[] bytes = base64Decoder.decodeBuffer(base64Img);
outputStream.write(bytes);
outputStream.flush();
outputStream.close();
} catch (IOException e) {
System.out.println("下载失败");
e.printStackTrace();
}
return "下载成功";
}
//读取图片后 进行Base64编码
public static String imgToBase64(String imgPath) {
InputStream inputStream = null;
byte[] data = null;
try {
inputStream = new FileInputStream(imgPath);
data = new byte[inputStream.available()];
inputStream.read(data);
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
//字节数组进行Base64编码
BASE64Encoder encoder = new BASE64Encoder();
//返回Base64编码过后的字节数组字符串
return encoder.encode(data);
}
//查看Base64位图片的大小,头部处理
public static int obtainImageSize1(String imageBase) {
String str = imageBase;
//处理头部的东西,注意,逗号也必须去除。
str = str.replace("data:image/png;base64,", "");
str = str.replace("=", "");
//这里计算出来的是字节大小 也即是B
int size = (str.length() - (str.length() / 8) * 2);
//除以1024 得到的就是KB的大小了
return size / 1024;
}
//imageBase就是要传来的图片数据 因为我传来的照片头部已经去掉了,所以这里就不需要再做处理,只做“=”号的处理就可以了
public static int obtainImageSize2(String imageBase) {
String str = imageBase;
str = str.replace("=", "");
//这里计算出来的是字节大小 也即是B
int size = (str.length() - (str.length() / 8) * 2);
//除以1024 得到的就是KB的大小了
return size / 1024;
}
}
jar 包链接如下:
https://pan.baidu.com/s/1QjINa3B-tnmzsXAlTOWsPg
提取码:qh5f