Java Eclipse-从servlet将GIF保存到文件时出现问题
我在EclipseMars中制作一个简单的动画gif作为一个任务,任务的一部分是用户应该能够通过网页以某种方式影响动画,因此必须在servlet中制作。因此,我为用户创建了输入参数,以影响在黑色背景上“落下”的7个移动矩形的颜色。无论如何,问题是,当我运行代码时,由于某种原因,它不会将gif保存到FileOutputStream,但不会给出错误消息或任何东西。我在一个测试版本中创建了另一个动画,用户无法影响颜色,然后它工作得非常好。文件是超时保存的,因此我使用相同的方法将其保存在servlet中,但由于某些原因,它无法工作。这是我的密码:Java Eclipse-从servlet将GIF保存到文件时出现问题,java,gif,animated-gif,javax.imageio,fileoutputstream,Java,Gif,Animated Gif,Javax.imageio,Fileoutputstream,我在EclipseMars中制作一个简单的动画gif作为一个任务,任务的一部分是用户应该能够通过网页以某种方式影响动画,因此必须在servlet中制作。因此,我为用户创建了输入参数,以影响在黑色背景上“落下”的7个移动矩形的颜色。无论如何,问题是,当我运行代码时,由于某种原因,它不会将gif保存到FileOutputStream,但不会给出错误消息或任何东西。我在一个测试版本中创建了另一个动画,用户无法影响颜色,然后它工作得非常好。文件是超时保存的,因此我使用相同的方法将其保存在servlet中
import java.awt.*;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.jmge.gif.Gif89Encoder;
@WebServlet("/Animation")
public class Animation extends HttpServlet {
private static final long serialVersionUID = 1L;
public Animation() {
super();
}
static void drawFrame(Graphics2D g, int frame, Color c1, Color c2, Color c3, Color c4, Color c5, Color c6, Color c7){
g.setColor(Color.black);
g.fillRect(0, 0, 150, 150);
g.setColor(c1);
g.fillRect(0,8*frame-20,50,20);
g.setColor(c2);
g.fillRect(50,8*frame-20,50,20);
g.setColor(c3);
g.fillRect(50,8*frame-40,50,20);
g.setColor(c4);
g.fillRect(50,8*frame-60,50,20);
g.setColor(c5);
g.fillRect(50,8*frame-80,50,20);
g.setColor(c6);
g.fillRect(50,8*frame-100,50,20);
g.setColor(c7);
g.fillRect(50,8*frame-120,50,20);
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
if (request.getParameter("c1") == null){
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<form>");
out.println("Color 1: <input name='c1' value='1FEA00'/><br>");
out.println("Color 2: <input name='c2' value='FFFF00'/><br>");
out.println("Color 3: <input name='c3' value='FF9000'/><br>");
out.println("Color 4: <input name='c4' value='FF0000'/><br>");
out.println("Color 5: <input name='c5' value='F000FF'/><br>");
out.println("Color 6: <input name='c6' value='9600FF'/><br>");
out.println("Color 7: <input name='c7' value='0000FF'/><br>");
out.println("<input type = 'submit'/>");
out.println("</form>");
}else{
Color c1 = new Color(Integer.parseInt(request.getParameter("c1"),16));
Color c2 = new Color(Integer.parseInt(request.getParameter("c2"),16));
Color c3 = new Color(Integer.parseInt(request.getParameter("c3"),16));
Color c4 = new Color(Integer.parseInt(request.getParameter("c4"),16));
Color c5 = new Color(Integer.parseInt(request.getParameter("c5"),16));
Color c6 = new Color(Integer.parseInt(request.getParameter("c6"),16));
Color c7 = new Color(Integer.parseInt(request.getParameter("c7"),16));
try {
response.setContentType("image/gif");
Gif89Encoder genc = new Gif89Encoder();
FileOutputStream out = new FileOutputStream("animation1.gif");
for(int i=0;i<7;i++)
{
BufferedImage image = new BufferedImage(700,100, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = image.createGraphics();
drawFrame(g,i,c1,c2,c3,c4,c5,c6,c7);
genc.addFrame(image);
g.dispose();
ImageIO.write(image, "gif", response.getOutputStream());
}
genc.setUniformDelay(10);
genc.setLoopCount(0);
genc.encode(out);
out.close();
}catch(Exception e){
System.err.println(e);
}
}
}
}
import java.awt.*;
导入java.awt.Color;
导入java.awt.Graphics2D;
导入java.awt.image.buffereImage;
导入java.io.File;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入java.io.PrintWriter;
导入javax.imageio.imageio;
导入javax.servlet.ServletException;
导入javax.servlet.annotation.WebServlet;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入net.jmge.gif.Gif89Encoder;
@WebServlet(“/Animation”)
公共类动画扩展HttpServlet{
私有静态最终长serialVersionUID=1L;
公共动画(){
超级();
}
静态空心画框(图形2D g、内部画框、颜色c1、颜色c2、颜色c3、颜色c4、颜色c5、颜色c6、颜色c7){
g、 设置颜色(颜色为黑色);
g、 fillRect(0,0,150,150);
g、 setColor(c1);
g、 fillRect(0,8*帧-20,50,20);
g、 setColor(c2);
g、 fillRect(50,8*frame-20,50,20);
g、 setColor(c3);
g、 fillRect(50,8*frame-40,50,20);
g、 setColor(c4);
g、 fillRect(50,8*frame-60,50,20);
g、 setColor(c5);
g、 fillRect(50,8*frame-80,50,20);
g、 setColor(c6);
g、 fillRect(50,8*frame-100,50,20);
g、 setColor(c7);
g、 fillRect(50,8*frame-120,50,20);
}
public void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
if(request.getParameter(“c1”)==null){
response.setContentType(“text/html”);
PrintWriter out=response.getWriter();
out.println(“”);
out.println(“颜色1:
”;
out.println(“颜色2:
”;
out.println(“颜色3:
”;
out.println(“颜色4:
”;
out.println(“颜色5:
”;
out.println(“颜色6:
”;
out.println(“颜色7:
”;
out.println(“”);
out.println(“”);
}否则{
颜色c1=新颜色(Integer.parseInt(request.getParameter(“c1”),16));
Color c2=新颜色(Integer.parseInt(request.getParameter(“c2”),16));
Color c3=新颜色(Integer.parseInt(request.getParameter(“c3”),16));
颜色c4=新颜色(Integer.parseInt(request.getParameter(“c4”),16));
Color c5=新颜色(Integer.parseInt(request.getParameter(“c5”),16));
Color c6=新颜色(Integer.parseInt(request.getParameter(“c6”),16));
Color c7=新颜色(Integer.parseInt(request.getParameter(“c7”),16));
试一试{
response.setContentType(“image/gif”);
Gif89Encoder genc=新的Gif89Encoder();
FileOutputStream out=新的FileOutputStream(“animation1.gif”);
对于(int i=0;iSee)或者为什么要创建多个GIF?您正在使用ImageIO将每个帧存储在循环中,并将servlet响应作为完整的独立文件写入。写入
,但写入另一个(动画)使用Gif89Encoder
写入文件。这是有意的吗?请参阅或为什么要创建多个gif?使用ImageIO将每个帧存储在循环中,将servlet响应作为完整的独立文件写入。写入,但使用Gif89Encoder
将另一帧(动画)写入文件。这是有意的吗?