Java 将base64编码字符串转换为图片工具类

前言

在一些前后端分离项目中,接口方需要前端把图片转换成base64编码字符串,和表单信息一起通过json接口提交。故在后端中,需要对前端传过来的bas64编码字符串转换成图片文件进行存储。

代码

java 复制代码
import lombok.extern.slf4j.Slf4j;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Base64;
import java.util.UUID;

/**
 * 图片处理工具
 * @author rocky
 * @date 2024/01/01 17:29
 */
@Slf4j
public class ImageUtils {

    /**
     * 将base64编码字符串转换为图片
     * @param file base64编码
     * @param path 图片存储路径
     * @return String 文件名
     */
    public static String base64ToImage(String file, String path) {
        // 解密
        OutputStream out = null;
        String fileName = UUID.randomUUID().toString() + ".jpg";
        String filePath = path + File.separator + fileName;
        try {
            File image = new File(filePath);
            File parent = image.getParentFile();
            if (!parent.exists()) {
                parent.mkdirs();
            }
            if (!image.exists()) {
                image.createNewFile();
            }
            // 解密
            Base64.Decoder decoder = Base64.getDecoder();
            // 去掉base64前缀 data:image/jpeg;base64,
            file = file.substring(file.indexOf(",", 1) + 1, file.length());
            byte[] b = decoder.decode(file);
            // 处理数据
            for (int i = 0; i < b.length; ++i) {
                if (b[i] < 0) {
                    b[i] += 256;
                }
            }
            // 保存图片
            out = new FileOutputStream(image);
            out.write(b);
        } catch (IOException e) {
            log.error("base64转换图片过程中发生异常", e);
            fileName = null;
        } finally {
            if (out != null) {
                try {
                    out.flush();
                    out.close();
                } catch (IOException e) {
                    log.error("base64转换图片过程中发生异常", e);
                }
            }
        }
        return fileName;
    }

}
相关推荐
brave_zhao4 分钟前
launch4j亲测打包java的jar转为exe执行文件
java
利刃大大5 分钟前
【RabbitMQ】SpringBoot整合RabbitMQ:工作队列 && 发布/订阅模式 && 路由模式 && 通配符模式
java·spring boot·消息队列·rabbitmq·java-rabbitmq
lkbhua莱克瓦246 分钟前
进阶-存储对象1-视图
java·数据库·sql·mysql·视图
yangminlei8 分钟前
Spring Boot 自动配置原理与自定义 Starter 开发实战
java·数据库·spring boot
悟空码字10 分钟前
10分钟搞定!SpringBoot集成腾讯云短信全攻略,从配置到发送一气呵成
java·spring boot·后端
爱编程的小吴12 分钟前
【力扣练习题】151. 反转字符串中的单词
java·算法·leetcode
未来龙皇小蓝21 分钟前
Spring注入Bean流程及其理解
java·spring boot·后端·spring·代理模式
知秋正在99624 分钟前
Java实现Html保存为.mhtml文件
java·开发语言·html
码头整点薯条27 分钟前
大数据量查询处理方案
java
菜鸟233号29 分钟前
力扣474 一和零 java实现
java·数据结构·算法·leetcode·动态规划