我用java读取一个gif图片,把它再重新写一个gif图片,但是新写出来的图片就没有动画了,为什么??
急用,请高手帮忙,谢谢我刚开始是这样写的,运行生成的gif图片不能看
List < BufferedImage > images = new ArrayList<BufferedImage>();
        try{
         File file=new File("e:\\awkoe.gif");
                java.util.Iterator<ImageReader> imageReaders = ImageIO.getImageReadersByFormatName("gif");
ImageReader imageReader = (ImageReader)imageReaders.next();
imageReader.setInput(ImageIO.createImageInputStream(file));
for(int i = 0;true;++i){
try{
BufferedImage aa=imageReader.read(i);
images.add(aa);
}catch (Exception e) {
break;
}
}
BufferedImage[] bufimages= images.toArray(new BufferedImage[images.size()]);
Iterator<ImageWriter> imageWriters = ImageIO.getImageWritersByFormatName("gif");
ImageWriter imageWriter = (ImageWriter)imageWriters.next();
File outfile=new File("d:\\aa.gif");
outfile.delete();
imageWriter.setOutput(ImageIO.createImageOutputStream(outfile));
if(imageWriter.canWriteSequence()){
imageWriter.prepareWriteSequence(null);
for(int i = 0;i < bufimages.length;++i){
imageWriter.writeToSequence(new IIOImage(bufimages[i],null,null),null);
}
imageWriter.endWriteSequence();
}else{
for(int i = 0;i < bufimages.length;++i){
imageWriter.write(bufimages[i]);
}
}
        }catch (Exception   e)   {   
            e.printStackTrace();   
        }   现在用这个方法,生成的gif可以看,但是他不是动画
try {
File file=new File("d:\\aa.gif");
Image image=ImageIO.read(new File("e:\\awkoe.gif"));
GifEncoder   encoder   =  new   GifEncoder(image,new FileOutputStream(file));   
        encoder.encode();  
} catch (Exception e) {}请大家帮忙 谢谢

解决方案 »

  1.   

    试试这种方法,包可以!
    package imageCopy;public class Conf {    public static final String OLDPATH="d:/dzh.jpg";
        public static final String NEWPATH="e:/dzh123/asdf/adsf/asdf/asdf";
    }
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;public class ImageOperator {
        public String FileCopy() {
            String result="";
            File old = new File(Conf.OLDPATH);
            File newImage = new File(Conf.NEWPATH);
            newImage.mkdirs();
            FileInputStream fis = null;
            FileOutputStream fos = null;        try {
                if (!old.exists()) {
                    result="the file is not exists";
                    return result;
                } else {
                    fis = new FileInputStream(old);
                    
                    if(!newImage.exists() ){
                        //newImage.mkdir();
                        newImage.createNewFile();
                        
                    }
                    fos = new FileOutputStream(newImage+"/"+ old.getName());
                    
                    byte[] temp = new byte[1000];
                    int size = fis.read(temp);
                    while (size != -1) {
                        fos.write(temp);
                        size = fis.read(temp);
                    }
                   result="the File Copy is success!";
                   return result;
                }
            } catch (FileNotFoundException fileNot) {
                result="the File Copy is Failed!";
                fileNot.printStackTrace();
                return result;
            } 
            catch(IOException e){
                e.printStackTrace();
                result="the File Copy is Failed!";
                return result;
            }
            finally{
                try{
                    fis.close();
                    fos.close();
                    
                }catch(Exception ex){}
                
            }    }
    }
    //主程序
    package imageCopy;public class ImageMain {    public static void main(String[] args) {
           ImageOperator op=new ImageOperator();
        
          System.out.println( op.FileCopy());
        }}
      

  2.   

    谢谢楼上,但我的不是在本机移动,
    我需要在一个jsp页面上有个<img src='/image'>标签,他提交到一个servlet,
    在servlet中读取本地的一个gif图片,把它返回到jsp页面。
    这样怎么弄?
      

  3.   

    Servlet中这样写
    String imagepath=request.getParameter("imagepath");

    System.out.println("imagepath:"+imagepath);
    String serverpath=request.getRealPath("/")+"image"+imagepath.substring(imagepath.lastIndexOf("\\"), imagepath.length());
    System.out.println("serverpath:"+serverpath);
    UpBiz objupbiz=new UpBiz();
    if(objupbiz.readFile(imagepath, serverpath))
    {
    RequestDispatcher requestdispatcher=request.getRequestDispatcher("/ok.jsp");
    requestdispatcher.forward(request, response);
    }
    else
    {
    RequestDispatcher requestdispatcher=request.getRequestDispatcher("/fial.jsp");
    requestdispatcher.forward(request, response);
    }UpBiz类这样写
    public class UpBiz {
    private OutputStream out=null;
    private InputStream in=null;
    private BufferedInputStream inb=null;
    private BufferedOutputStream outb=null;
    public boolean readFile(String imagepath,String serverpath)
    {
    boolean flag=false;
    File infile=new File(imagepath);
    File outfile=new File(serverpath);
        byte[] b=new byte[100];
    try {
    in = new FileInputStream(infile);
    out=new FileOutputStream(outfile);
    inb=new BufferedInputStream(in);
    outb=new BufferedOutputStream(out);
    int i=in.read(b);
    while(i!=-1)
    {
    outb.write(b);
    outb.flush();
    i=inb.read(b);
    }
    flag=true;
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }finally{
    try {
    inb.close();
    outb.close();
    in.close();
    out.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    return flag;
    }
    }
    试一试吧!
      

  4.   

    经常在开发过程中会需要一些动态的图片来使程序变得连惯.如果采用ImageIO加载图片的话只会加载gif图片中的一帧,采用Toolkit类就可以把它们全部加载进来.
    示例:
      Image image  =Toolkit.getDefaultToolkit.createImage(当前类类名.class.getResource(图片所在位置));