您的GIF无法动画,因为您只向客户端发送第一帧。:-)
实际上,您是这样,因为
ImageIO.read仅读取第一帧(并且a
BufferedImage只能包含单个帧/图像)。然后,您将该单个帧写入servlet输出流,并且结果将不进行动画处理(应该可以使用来创建动画GIF
ImageIO,但是这样做的代码将非常冗长,请参阅如何在Java中对动画GIF进行编码,使用ImageWriter和ImageIO?以及使用ImageIO?创建动画GIF)。
好消息是,该解决方案既简单,又可以节省CPU周期。
ImageIO如果您只想发送存储在磁盘上的GIF动画,则无需参与其中。实际上,可以使用相同的技术来发送任何二进制内容。
相反,只需执行以下操作:
response.setContentType("image/gif");String filepath = "PATH//TO//GIF.gif";OutputStream out = response.getOutputStream();InputStream in = new FileInputStream(new File(filepath));try { FileUtils.copy(in, out);finally { in.close();}out.close();FileUtils.copy可以实现为:
public void copy(final InputStream in, final OutputStream out) { byte[] buffer = new byte[1024]; int count; while ((count = in.read(buffer)) != -1) { out.write(buffer, 0, count); } // Flush out stream, to write any remaining buffered data out.flush();}


