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 表示,那么您将无法摆脱失去动画的困境。
如何将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 表示,那么您将无法摆脱失去动画的困境。