import org.springframework.util.Assert;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.Base64; /**
* @description: 图片工具类
* @author: Mr.Fang
**/ public class ImageUtils { /**
* description: 图片转 base64
* create by: Mr.Fang
*
* @param path 文件路径
* @return: java.lang.String
*/
public static String imageToBase64(String path) throws IOException {
File file = new File(path);
Assert.isTrue(file.exists(), "文件不存在");
String name = file.getName();
String formatName = name.substring(name.indexOf(".") + 1);
BufferedImage read = ImageIO.read(file);
// 创建字节流
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
// 将图片写入字节流
ImageIO.write(read, formatName, byteStream);
// 字节流转字节数组
byte[] bytes = byteStream.toByteArray();
// base64 编码
String base64 = Base64.getEncoder().encodeToString(bytes).trim();
// base64 图片
return String.format("data:image/%s;base64,%s", formatName, base64);
} /**
* description: 图片转 base64
* create by: Mr.Fang
*
* @param inputStream 输入流
* @param formatName 文件格式
* @return: java.lang.String
*/
public static String imageToBase64(InputStream inputStream, String formatName) throws IOException {
BufferedImage read = ImageIO.read(inputStream);
// 创建字节流
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
// 将图片写入字节流
ImageIO.write(read, formatName, byteStream);
// 字节流转字节数组
byte[] bytes = byteStream.toByteArray();
// base64 编码
String base64 = Base64.getEncoder().encodeToString(bytes).trim();
// base64 图片
return String.format("data:image/%s;base64,%s", formatName, base64);
} /**
* description: base64 转图片
* create by: Mr.Fang
*
* @param base64
* @param path 文件输出路径
* @return: java.lang.String
*/
public static Boolean base64ToImage(String base64, String path) {
String[] result = base64.split(",");
String base64Head = result[0];
String bytesString = result[1];
String formatName = base64Head.substring(base64Head.indexOf("/") + 1, base64Head.indexOf(";"));
// 转字节数组
byte[] decode = Base64.getDecoder().decode(bytesString.getBytes(StandardCharsets.UTF_8));
// 创建字节流
ByteArrayInputStream inputStream = new ByteArrayInputStream(decode);
BufferedImage read = null;
try {
read = ImageIO.read(inputStream);
return ImageIO.write(read, formatName, new File(String.format("%s.%s", path, formatName)));
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
}

Base64 java图片工具类的更多相关文章

  1. Java图片工具类,完成图片的截取和任意缩放

    package com.common.util; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Renderin ...

  2. 拍照、本地图片工具类(兼容至Android7.0)

    拍照.本地图片工具类:解决了4.4以上剪裁会提示"找不到文件"和6.0动态授予权限,及7.0报FileUriExposedException异常问题. package com.hb ...

  3. Android--很实用的图片工具类

    import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileNotFoundException; imp ...

  4. Base64加密解密工具类

    使用Apache commons codec类Base64进行加密解密 maven依赖 <dependency> <groupId>commons-codec</grou ...

  5. java图片压缩工具类(指定压缩大小)

    1:先导入依赖 <!--thumbnailator图片处理--> <dependency> <groupId>net.coobird</groupId> ...

  6. Java开发工具类集合

    Java开发工具类集合 01.MD5加密工具类 import java.security.MessageDigest; import java.security.NoSuchAlgorithmExce ...

  7. Java Properties工具类详解

    1.Java Properties工具类位于java.util.Properties,该工具类的使用极其简单方便.首先该类是继承自 Hashtable<Object,Object> 这就奠 ...

  8. Java json工具类,jackson工具类,ObjectMapper工具类

    Java json工具类,jackson工具类,ObjectMapper工具类 >>>>>>>>>>>>>>> ...

  9. Java日期工具类,Java时间工具类,Java时间格式化

    Java日期工具类,Java时间工具类,Java时间格式化 >>>>>>>>>>>>>>>>>&g ...

  10. Java并发工具类 - CountDownLatch

    Java并发工具类 - CountDownLatch 1.简介 CountDownLatch是Java1.5之后引入的Java并发工具类,放在java.util.concurrent包下面 http: ...

随机推荐

  1. Python 布尔类型

    布尔值表示两个值之一:True(真)或False(假). 布尔值 在编程中,您经常需要知道一个表达式是否为True或False. 您可以在Python中评估任何表达式,并获得两个答案之一:True或F ...

  2. 华为Push用户增长服务:精准触达,加速增长

    速戳了解华为Push用户增长服务:通过精细化运营,助力开发者高效实现用户增长,提升用户活跃度和粘性! 合作咨询请点此链接 了解更多详情>> 访问华为开发者联盟官网 获取开发指导文档 华为移 ...

  3. Node.js 与前端开发实战

    0x1 Node.js 的应用场景 前端工程化 打包工具:webpack.vite.esbuild.parce 代码压缩:uglifyjs 语法转换:babeljs,typescript 难以替代 W ...

  4. 淘宝二面:MySQL里有2000万条数据,但是Redis中只存20万的数据,如何保证redis中的数据都是热点数据?

    引言 在当今互联网领域,尤其在大型电商平台如淘宝这样的复杂分布式系统中,数据的高效管理和快速访问至关重要.面对数以千万计的商品.交易记录以及其他各类业务数据,如何在MySQL等传统关系型数据库之外,借 ...

  5. sql 语句系列(列举系列)[八百章之第八章]

    前言 这一张就是就是查询自己设计数据库的结构,对于接收一个老的项目相当重要. 列举模式中的表 查询所以表 select table_name from INFORMATION_SCHEMA.TABLE ...

  6. C++ 递归与面向对象编程基础

    C++ 递归 递归是一种使函数调用自身的技术.这种技术提供了一种将复杂问题分解为简单问题的方法,从而更容易解决问题. 递归可能有点难以理解.理解其工作原理的最佳方法是通过实验来尝试. 递归示例 将两个 ...

  7. Linux下的常见基本指令

    pwd //显示当前用户所在的路径 ls //显示当前路径下的文件名或者目录名称 ls-l //显示当前路径下的文件或者目录的更详细的属性信息 cd 一个目录路径 //进入一个目录,进去后,可以用pw ...

  8. 【笔记】Oracle Offset 以及力扣

    [笔记]Oracle Offset offset 代表跳过前 n 行,如果表少于 n+1 条记录,结果集将是空的:比如 n = 100,表示从 101 开始往后查. fetch next 代表往后查 ...

  9. 力扣59(java)-螺旋矩阵Ⅱ(中等)

    题目: 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix . 输入:n = 3 输出:[[1,2,3],[8,9,4],[ ...

  10. ElasticSearch IK 分词器快速上手

    ​简介: ElasticSearch IK 分词器快速上手 一.安装 IK 分词器 1.分配伪终端 我的 ElasticSearch 是使用 Docker 安装的,所以先给容器分配一个伪终端.之后就可 ...