ImageUtils
package com.spring.autosales.utils;
import com.spring.autosales.constant.PlatConstant;
import org.springframework.web.multipart.MultipartFile;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.Base64;
public class ImageUtils {
/**
*通过图片base64流判断图片等于多少字节
*image 图片流
*/
public static double getImageSizeByBase64(String base64Image){
if(base64Image.startsWith("data:image/png;base64,")){
base64Image = base64Image.replace("data:image/png;base64,","");
}
if(base64Image.startsWith("data:image/jpg;base64,")){
base64Image = base64Image.replace("data:image/jpg;base64,","");
}
if(base64Image.startsWith("data:image/jpeg;base64,")){
base64Image = base64Image.replace("data:image/jpeg;base64,","");
}
Integer equalIndex= base64Image.indexOf("=");//2.找到等号,把等号也去掉
if(base64Image.indexOf("=")>0) {
base64Image=base64Image.substring(0, equalIndex);
}
Integer strLength=base64Image.length();//3.原来的字符流大小,单位为字节
double size=strLength-(strLength/8)*2;//4.计算后得到的文件流大小,单位为字节
//1M = 1048576字节 1024*1024
size = size/1048576;
return NumberUtils.getFormatDouble(size,2);
}
/**
* 保存图片文件 返回全路径
* @param base64Image
* @param fileName
* @param path
* @return
*/
public static String saveImageToPath(String base64Image,String fileName,String path){
//将图片保持到 path/fileName 路径的文件中
File file = base64ToImage2(base64Image, path, fileName);
if (file.exists()) {
return path+fileName;
}
return null;
}
/**
* 图片文件转base64
* @param pic
* @return
*/
public static String ImageToBase64(MultipartFile pic) throws IOException {
byte[] data=pic.getBytes();
return Base64.getEncoder().encodeToString(data);
}
/**
* 图片转base64
* @param imgPath
* @return
*/
public static String ImageToBase64(String imgPath) {
byte[] data = null;
// 读取图片字节数组
try {
InputStream in = new FileInputStream(imgPath);
data = new byte[in.available()];
in.read(data);
in.close();
} catch (IOException e) {
e.printStackTrace();
}
// 对字节数组Base64编码
return Base64.getEncoder().encodeToString(data);
//BASE64Encoder encoder = new BASE64Encoder();
// System.out.println(encoder.encode(data));
// 返回Base64编码过的字节数组字符串
//return encoder.encode(data);
}
public static File base64ToImage2(String base64String,String path,String fileName){
File file = null;
try {
String imageType = "jpg";
//根据字符串前缀判断图片类型
if(base64String.startsWith("data:/png;bimagease64,")){
imageType = "png";
base64String = base64String.replace("data:image/png;base64,","");
}
if(base64String.startsWith("data:image/jpg;base64,")){
imageType = "jpg";
base64String = base64String.replace("data:image/jpg;base64,","");
}
if(base64String.startsWith("data:image/jpeg;base64,")){
imageType = "jpeg";
base64String = base64String.replace("data:image/jpeg;base64,","");
}
System.out.println("base64String"+base64String);
//判断路径 没有的先创建
File pathFile = new File(path);
if (!pathFile.exists()) {
boolean mkdirs = pathFile.mkdirs();
}
//base64解码
byte[] bytes1 = Base64.getDecoder().decode(base64String);
// BASE64Decoder decoder = new BASE64Decoder();
// byte[] bytes1 = decoder.decodeBuffer(base64String);
//将字节数组转换为输入流(这样就可以使用标准的输入流读取操作来处理字节数组中的数据)
ByteArrayInputStream bais = new ByteArrayInputStream(bytes1);
//将输入流转换为图片
BufferedImage bi1 = ImageIO.read(bais);
//生成文件
file = new File(path+fileName+"."+imageType);
//将图片写入文件
ImageIO.write(bi1, imageType , file);
} catch (IOException e) {
e.printStackTrace();
}
return file;
}
/**
*
* @param base64String
* @param fileName 全路径
* @param fileType jpg png
* @return
*/
public static File base64ToImage3(String base64String,String fileName,String fileType){
File file = null;
try {
byte[] bytes1 = Base64.getDecoder().decode(base64String);
// BASE64Decoder decoder = new BASE64Decoder();
// byte[] bytes1 = decoder.decodeBuffer(base64String);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes1);
BufferedImage bi1 = ImageIO.read(bais);
file = new File(fileName+"."+fileType);
ImageIO.write(bi1, fileType, file);
} catch (IOException e) {
e.printStackTrace();
}
return file;
}
/**
*
* @param base64String
* @param path 文件存放路径
* @param fileName 文件名
* @param fileType jpg png
* @return
*/
public static File base64ToImage4(String base64String,String path,String fileName,String fileType){
File file = null;
try {
//判断路径 没有的先创建
File pathFile = new File(path);
if(!pathFile.exists()){
pathFile.mkdirs();
}
byte[] bytes1 = Base64.getDecoder().decode(base64String);
// BASE64Decoder decoder = new BASE64Decoder();
// byte[] bytes1 = decoder.decodeBuffer(base64String);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes1);
BufferedImage bi1 = ImageIO.read(bais);
file = new File(path+"/"+fileName+"."+fileType);
ImageIO.write(bi1, fileType, file);
} catch (IOException e) {
e.printStackTrace();
}
return file;
}
public static String getRealImageBase(String baseImage) {
if(baseImage.startsWith("data:image/png;base64,")){
baseImage = baseImage.replace("data:image/png;base64,","");
}
if(baseImage.startsWith("data:image/jpg;base64,")){
baseImage = baseImage.replace("data:image/jpg;base64,","");
}
if(baseImage.startsWith("data:image/jpeg;base64,")){
baseImage = baseImage.replace("data:image/jpeg;base64,","");
}
return baseImage;
}
}