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. k8s之operator

    背景 数字经济的兴起推动了云计算.物联网.大数据行业的快速蓬勃发展,对数据中心提出了更高的要求,同时,用户对于数据库运维自动化的需求越来越高,数据库即服务的需求越来越强烈. 随着k8s的普及以及云原生 ...

  2. spark dstaframe 多字段统计

    val aggCols = List("Pclass","Age","Fare") .map(colName=>functions.a ...

  3. node nvm使用

    背景 node 经过了一次大的改变,直接从8到了10,差别很大,但是有的项目又需要用到8,这个时候不能完全升级. 所以我们需要一个管理虚拟环境的工具. 安装 https://github.com/co ...

  4. 高效生产管理:选择顺通鞋业ERP系统派单的理由

    显然,传统的生产管理模式已经难以满足现代企业的需求,因此选择一款适合自身业务特点的生产管理软件成为了企业的当务之急.顺通鞋业ERP系统作为一款功能强大的生产管理软件,凭借其出色的派单功能,正逐渐成为众 ...

  5. Oracle nullif函数使用

    nullif函数使用 简单来说,就是表达式1的值和表达式2的值进行对比 可以使用''字符 select nullif('','1111') from dual 输出为空 不可以使用null字符 sel ...

  6. 力扣1097(MySQL)-游戏玩法分析Ⅴ(困难)

    题目: 我们将玩家的安装日期定义为该玩家的第一个登录日. 我们还将某个日期 X 的第 1 天留存时间定义为安装日期为 X 的玩家的数量,他们在 X 之后的一天重新登录,除以安装日期为 X 的玩家的数量 ...

  7. 技术门槛高?来看 Intel 机密计算技术在龙蜥社区的实践 | 龙蜥技术

    简介: 数据可用不可见是怎么做到的? 编者按:龙蜥社区云原生机密计算 SIG 定位于云原生机密计算底层基础设施,专注于机密计算底层技术.在阿里巴巴开源开放周中, 龙蜥社区机密计算 SIG Mainta ...

  8. Java工具篇之Disruptor高性能队列

    简介: disruptor适用于多个线程之间的消息队列,`作用与ArrayBlockingQueue有相似之处`,但是disruptor从功能.性能都远好于ArrayBlockingQueue,当多个 ...

  9. 深入浅出eBPF|你要了解的7个核心问题

    简介: 过去一年,ARMS基于eBPF技术打造了Kubernetes监控,提供多语言无侵入的应用性能,系统性能,网络性能观测能力,验证了eBPF技术的有效性.eBPF技术和生态发展很好,未来前景广大, ...

  10. 揭秘阿里云神龙团队拿下TPCx-BB排名第一的背后技术

    ​简介:阿里云自主研发的神龙大数据加速引擎获得了TPCx-BB SF3000世界排名第一的成绩. ​ 一  背景介绍 近日,TPC Benchmark Express-BigBench(简称TPCx- ...