利用Java实现在线图片URL转换为Base64以及反向解析成图片

 更新时间:2025年03月28日 09:09:05   作者:码农研究僧  
Base64 是一种将二进制数据编码为 ASCII 字符串格式的方法,常用于在网络中安全传输图片、文件等内容,本文给大家介绍了如何利用Java实现在线图片URL转换为Base64以及反向解析成图片,文章有相关的代码和图文供大家参考,需要的朋友可以参考下

1. 基本知识

Base64 是一种将二进制数据编码为 ASCII 字符串格式的方法,常用于在网络中安全传输图片、文件等内容

  • 编码后只包含 [A-Za-z0-9+/=],适合在文本协议中传输

  • 编码后的内容比原始内容大约多出 33% 的体积

  • 常用于 HTML <img src="data:image/jpeg;base64,..."> 中内嵌图片、邮件传输、JWT 等

在线图片 URL -> 下载图片内容 -> 转为字节数组 -> Base64 编码

  1. 利用 java.net.URL 获取网络资源
  2. 用 InputStream 读取图片数据
  3. 使用 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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot跨域Access-Control-Allow-Origin实现解析

    SpringBoot跨域Access-Control-Allow-Origin实现解析

    这篇文章主要介绍了SpringBoot跨域Access-Control-Allow-Origin实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Java随机生成验证码的实现示例

    Java随机生成验证码的实现示例

    这篇文章主要介绍Java随机生成验证码的实现方法,文中有相关的实现代码供大家参考,具有一定的参考价值,需要的朋友可以参考下
    2023-08-08
  • 关于SpringBoot整合Canal数据同步的问题

    关于SpringBoot整合Canal数据同步的问题

    大家都知道canal是阿里巴巴旗下的一款开源工具,纯java开发,支持mysql数据库,本文给大家介绍SpringBoot整合Canal数据同步的问题,需要的朋友可以参考下
    2022-03-03
  • Spring Cloud实现提供API给客户端的方法详解

    Spring Cloud实现提供API给客户端的方法详解

    这篇文章主要给大家介绍了关于Spring Cloud实现提供API给客户端的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-01-01
  • 项目打包成jar后包无法读取src/main/resources下文件的解决

    项目打包成jar后包无法读取src/main/resources下文件的解决

    本文主要介绍了项目打包成jar后包无法读取src/main/resources下文件的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • Java中list.foreach()和list.stream().foreach()用法详解

    Java中list.foreach()和list.stream().foreach()用法详解

    在Java中List是一种常用的集合类,用于存储一组元素,List提供了多种遍历元素的方式,包括使用forEach()方法和使用Stream流的forEach()方法,这篇文章主要给大家介绍了关于Java中list.foreach()和list.stream().foreach()用法的相关资料,需要的朋友可以参考下
    2024-07-07
  • Map之computeIfAbsent使用解读

    Map之computeIfAbsent使用解读

    `computeIfAbsent`是Java 8引入的一个Map接口方法,用于简化在Map中获取值的操作,如果指定的键不存在,它会调用提供的函数生成一个新的值,并将其与键关联,这种方法减少了手动检查和插入的样板代码,使代码更加简洁和易读
    2025-02-02
  • Java编程实现轨迹压缩算法开放窗口实例代码

    Java编程实现轨迹压缩算法开放窗口实例代码

    这篇文章主要介绍了Java编程实现轨迹压缩算法开放窗口实例代码,具有一定借鉴价值,需要的朋友可以参考下。
    2017-11-11
  • Java实现猜数字小游戏详解流程

    Java实现猜数字小游戏详解流程

    猜数字是兴起于英国的益智类小游戏,起源于20世纪中期,一般由两个人或多人玩,也可以由一个人和电脑玩。游戏规则为一方出数字,一方猜,今天我们来用Java把这个小游戏写出来练练手
    2021-10-10
  • Java多线程揭秘之synchronized工作原理

    Java多线程揭秘之synchronized工作原理

    synchronized算是多线程中非常常用的加锁方式了,但很多人都不太理解其底层的工作原理。本篇文章博主用尽可能通俗易懂的方式来带大家去看看synchronized究竟是怎么加锁的
    2021-10-10

最新评论