当前位置: 代码网 > it编程>编程语言>Java > 利用Java实现在线图片URL转换为Base64以及反向解析成图片

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

2025年03月28日 Java 我要评论
1. 基本知识base64 是一种将二进制数据编码为 ascii 字符串格式的方法,常用于在网络中安全传输图片、文件等内容编码后只包含[a-za-z0-9+/=],适合在文本协议中传输编码后的内容比原

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内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com