如何将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;
}
上面的代码工作正常,但它丢失了动画
答案 0 :(得分:1)
你必须使用
public String encodeToString(byte[] src)
类BASE64.Encoder
的(来自java 8)
答案 1 :(得分:1)
BufferedImage类很可能不支持带动画的图像。因此代码打开并仅将图像解析为第一帧。
而是尝试使用URL.openStream直接获取字节,然后将下载的字节转换为base64。
请注意,这样您无法确定下载的文件实际上是图像,因为您根本没有打开它。这可能需要也可能不需要。
答案 2 :(得分:1)
我假设你想要的是GIF文件本身的Base64表示,而不是ImageIO表示。如果您有没有内置Base64支持的旧版Java,Apache Commons Codec将完成这项工作。使用URL.openStream()
将文件读入字节数组,而不是使用ImageIO,然后调用Base64.encodeBase64String
。如果您希望对结果网址进行编码,请改为调用Base64.encodeBase64URLSafe
。
如果您真的想要ImageIO表示,那么您就会因失去动画而陷入困境。