1. 基本知识
base64 是一种将二进制数据编码为 ascii 字符串格式的方法,常用于在网络中安全传输图片、文件等内容
编码后只包含
[a-za-z0-9+/=]
,适合在文本协议中传输编码后的内容比原始内容大约多出 33% 的体积
常用于 html
<img src="data:image/jpeg;base64,...">
中内嵌图片、邮件传输、jwt 等
在线图片 url -> 下载图片内容 -> 转为字节数组 -> base64 编码
- 利用 java.net.url 获取网络资源
- 用 inputstream 读取图片数据
- 使用 base64.getencoder().encodetostring() 进行编码
但是base64是无法转化为在线链接的,只能解析成图片下载下来而已!
类型 | 能否转化 | 说明 |
---|---|---|
url → base64 | ✅ 可以 | 直接读取资源,转为字节数组后编码 |
base64 → url | ❌ 不行 | 必须先上传至某个图床或服务器获取新 url |
基本的转化过程可以通过在线网址:https://www.toolhelper.cn/image/base64?tab=image
2. demo
在线url转化为base64的demo如下:(只需要替换链接即可)
import java.io.*; import java.net.url; import java.util.base64; public class imageutils { /** * 在线图片 url 转为 base64 字符串 * @param imageurl 图片的在线地址 * @return base64 编码字符串 * @throws ioexception 网络异常或读取失败 */ public static string convertimageurltobase64(string imageurl) throws ioexception { url url = new url(imageurl); try (inputstream is = url.openstream(); bytearrayoutputstream baos = new bytearrayoutputstream()) { byte[] buffer = new byte[8192]; // 缓冲区 int bytesread; while ((bytesread = is.read(buffer)) != -1) { baos.write(buffer, 0, bytesread); } // 获取字节数组并进行 base64 编码 byte[] imagebytes = baos.tobytearray(); return base64.getencoder().encodetostring(imagebytes); } } // 示例入口 public static void main(string[] args) throws ioexception { string url = "https://example.com/image.jpg"; string base64 = convertimageurltobase64(url); system.out.println("base64 编码结果:" + base64); } }
截图如下:
将 base64 字符串保存为本地图片文件(无法执行):
import java.io.*; import java.util.base64; public class base64toimage { /** * 将 base64 编码字符串转为图片并保存本地 * @param base64str 图片的 base64 字符串 * @param outputpath 本地保存路径,如 "output.jpg" * @throws ioexception 写入异常 */ public static void savebase64toimage(string base64str, string outputpath) throws ioexception { byte[] imagebytes = base64.getdecoder().decode(base64str); try (outputstream os = new fileoutputstream(outputpath)) { os.write(imagebytes); } } // 示例入口 public static void main(string[] args) throws ioexception { string base64str = "你的base64编码"; savebase64toimage(base64str, "output.jpg"); system.out.println("图片已保存至本地"); } }
截图如下:
是因为 java 中字符串字面量的最大长度为 65,535 个字符(字符数,不是字节数)。而一整段 base64 编码很容易超过这个限制,尤其是图片
可以保存在外部文件中,然后通过 java 读取
import java.io.*; import java.util.base64; public class base64toimage { /** * 从文本文件中读取 base64,并保存为图片 * @param base64filepath 存储 base64 的 .txt 文件路径 * @param outputimagepath 输出图片路径 * @throws ioexception */ public static void convertbase64filetoimage(string base64filepath, string outputimagepath) throws ioexception { // 读取 base64 内容 stringbuilder sb = new stringbuilder(); try (bufferedreader reader = new bufferedreader(new filereader(base64filepath))) { string line; while ((line = reader.readline()) != null) { sb.append(line); } } // 解码并写出图片 byte[] imagebytes = base64.getdecoder().decode(sb.tostring()); try (outputstream os = new fileoutputstream(outputimagepath)) { os.write(imagebytes); } } public static void main(string[] args) throws ioexception { string base64file = "base64_image.txt"; string outputpath = "restored.jpg"; convertbase64filetoimage(base64file, outputpath); system.out.println("图片还原成功!"); } }
截图如下:
再者如果是通过接口传输,无需这样子
考虑通过 http 请求(如前端用 post)传递 base64 字符串,而非硬编码在 java 文件中
到此这篇关于java实现在线图片url转换为base64以及反向解析成图片的文章就介绍到这了,更多相关java在线url转base64内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论