bri*_*avu 2 java bufferedimage image gif javax.imageio
我的servlet中有以下代码
response.setContentType("image/gif");
String filepath = "PATH//TO//GIF.gif";
OutputStream out = response.getOutputStream();
File f = new File(filepath);
BufferedImage bi = ImageIO.read(f);
ImageIO.write(bi, "gif", out);
out.close();
Run Code Online (Sandbox Code Playgroud)
此代码只是返回图像的第一帧.
如何实现返回完整的GIF图像?
您的GIF没有动画,因为您只向客户端发送第一帧.:-)
实际上,你是因为ImageIO.read只读取第一帧(并且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();
Run Code Online (Sandbox Code Playgroud)
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();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
951 次 |
| 最近记录: |