分享一个图片处理的工具类

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;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小林想被监督学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值