怎么利用 Base64 工具类实现图片字节数组与字符串的相互转换

胖墨吖_7971

胖墨吖_7971

2026-04-27

615人浏览

原创

base64工具类仅负责字节数组与字符串的编解码,不处理图片逻辑;图片能否正确还原取决于输入字节数组是否完整且格式合法,java中推荐使用java.util.base64原生api,需确保原始字节含文件头、剥离data:前缀、补全填充并校验长度为4的倍数。

怎么利用 base64 工具类实现图片字节数组与字符串的相互转换

Base64 工具类本身不处理图片逻辑,它只做字节数组和字符串的编解码;图片能否正确还原,完全取决于你传入的字节数组是否完整、格式是否合法。

Java 中用 java.util.Base64 编码图片字节数组

这是最常用也最安全的方式,JDK 8+ 原生支持,无需第三方依赖。

关键点:

  • Base64.getEncoder().encodeToString(byte[]) 接收的是原始图片字节(比如 Files.readAllBytes(Paths.get("a.jpg"))),不是经过压缩或截断的数据
  • 如果图片是从 BufferedImage 生成的,必须先写入 ByteArrayOutputStream 再获取字节数组,不能直接调用 getRaster().getDataBuffer().getData() —— 那只是像素数据,不含文件头信息,解码后打不开
  • 编码结果是纯 ASCII 字符串,可直接嵌入 JSON 或 HTML 的 src="data:image/jpeg;base64,..." 中

Java 中用 Base64.getDecoder() 解码回图片字节数组

解码失败通常不是 Base64 问题,而是输入字符串本身不合规。

常见错误现象:

科学计算器在线使用工具代码
科学计算器在线使用工具代码

html5 css3制作在线科学计算器ui布局,3D计算器面板,加减乘除数字计算器工具特效。

下载
  • 抛 IllegalArgumentException: Input is not a valid Base64 string:字符串含空格、换行、HTML 实体(如  )、前端未正确 encodeURIComponent
  • 解码后文件损坏:原始字符串被截断(比如数据库字段长度不够)、或前端上传时误用了 readAsText 而非 readAsDataURL
  • 注意 Base64.getDecoder().decode(String) 会严格校验填充字符 =,缺失会导致异常;若来源不可控,建议先用正则补全:s.replace("-", "+").replace("_", "/").replaceAll("[^A-Za-z0-9+/]", ""),再确保长度是 4 的倍数(末尾补 =)

Spring Boot 接口里传 Base64 图片字符串要注意什么

HTTP 请求体中传输 Base64 字符串,看似简单,实则容易在边界上出问题。

实操建议:

  • 前端发送时,用 JSON.stringify({ image: "data:image/png;base64,..." }),后端接收字段类型定义为 String,但必须剥离 data:...;base64, 前缀再解码 —— 否则 Base64.getDecoder() 会因非法字符报错
  • 不要把 Base64 字符串存在 TEXT 类型数据库字段里还设了 1024 长度限制:一张 1MB 的 PNG 编码后约 1.37MB,远超限制
  • 如果接口要支持大图,考虑改用 MultipartFile 直传二进制,Base64 只用于小图标或临时预览场景

Python 的 base64.b64encode 和 b64decode 行为差异

和 Java 不同,Python 的 base64 模块默认返回 bytes,不是 str。

容易踩的坑:

  • 编码后忘记调用 .decode('utf-8') 转字符串,导致 JSON 序列化失败(TypeError: Object of type bytes is not JSON serializable)
  • 解码时传入 str 却没 encode 回 bytes:正确写法是 base64.b64decode(s.encode('utf-8')),而不是 base64.b64decode(s)
  • 读取图片文件要用 open(path, 'rb').read(),用 'r' 模式会因编码问题直接报错

真正麻烦的从来不是 Base64 编解码本身,而是字节数组从哪来、到哪去、中间有没有被转义、截断、误解析。只要源头字节干净,Base64 就不会出错;一旦出错,优先查上游数据完整性,而不是怀疑工具类。

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

10897

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

8022

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

6952

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

1164

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

948

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1416

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2869

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

20151

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1255

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程