Java - GIF 到 base64 字符串

Java - GIF to base64 string

如何将gif转base64?

这是我到目前为止的尝试

public static String convertImageToBase64(String urlString, String type ){

    String imageString = null;
    ByteArrayOutputStream bos = new ByteArrayOutputStream();

    try {
        URL url = new URL(urlString);
        BufferedImage img = ImageIO.read( url );

        ImageIO.write(img, type, bos);
        byte[] imageBytes = bos.toByteArray();

        BASE64Encoder encoder = new BASE64Encoder();
        imageString = encoder.encode(imageBytes);

        bos.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return imageString;
}

上面的代码可以运行,但是它丢失了动画

你必须使用

public String encodeToString(byte[] src)

共class BASE64.Encoder(来自java 8)

很可能 class BufferedImage 不支持带有动画的图像。所以代码只打开并解析图像到第一帧。

而是尝试直接使用 URL.openStream 获取字节,然后将下载的字节转换为 base64。

请注意,通过这种方式您无法确定下载的文件是否真的是图像,因为您根本没有打开它。这可能需要也可能不需要。

我假设您想要的是 GIF 文件本身的 Base64 表示,而不是 ImageIO 表示。如果你有没有内置 Base64 支持的旧版本 Java,Apache Commons Codec 将完成这项工作。使用 URL.openStream()(而不是 ImageIO)将文件读入字节数组,然后调用 Base64.encodeBase64String。如果你想对结果 URL 进行编码,请改为调用 Base64.encodeBase64URLSafe

如果您真的想要 ImageIO 表示,那么您将无法摆脱失去动画的困境。