先不要说透明的gif图了,就连不透明的gif图也不能生成
--------------------------------------
int width=150,height=150;BufferedImage bi=new BufferedImage(width,height,java.awt.image.BufferedImage.TYPE_INT_RGB);
java.awt.Graphics2D g=(java.awt.Graphics2D)bi.getGraphics();g.setColor(java.awt.Color.RED);
g.setFont(new java.awt.Font("宋体",java.awt.Font.PLAIN,20));
g.drawString("测试",width/4+8,height-height/6);
g.dispose();response.setContentType("image/gif");
ImageIO.write(bi,"GIF",response.getOutputStream());
生成个透明png图,却正常,只是ie6下不支持透明png图.那位大侠帮帮我??

解决方案 »

  1.   

    处理gif的图需要其他的包的,我给你下载地址:http://download.csdn.net/source/205677 .然后给你个例子,需要Servlet访问的.import java.awt.AlphaComposite;
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics2D;
    import java.awt.image.BufferedImage;
    import java.io.OutputStream;
    import java.util.Random;public class Test2 {
     //定义验证码字符。去除了O和I等容易混淆的字母(也可写成)
     String s[]={"A","B","C","D","E","F","G","H","G","K","M","N","P","Q","R","S","T","U","V","W","X","Y","Z"
        ,"a","b","c","d","e","f","g","h","i","j","k","m","n","p","q","r","s","t","u","v","w","x","y","z"};
     //定义生成的验证码的宽度和高度
     int width=160;
     int height=30;
     
     public void myTest(OutputStream os)
     {
      //OutputStream os=null;   //生成字符
       AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER,1);
       AnimatedGifEncoder agf=new AnimatedGifEncoder();   agf.start(os);
       agf.setQuality(10);
       
       agf.setDelay(100);
       agf.setRepeat(0);
       BufferedImage frame=null;
       Graphics2D teg=null;
      String rands[]=new String[6];   for(int i=0;i<6;i++)
       {
        rands[i]=s[this.randomInt(0, s.length)];
       }  //生成字体
       Font   font[]=new Font[6];
       for(int i=0;i<6;i++)
       {
        font[i]=this.getFont();
       }
       //生成背景颜色
       Color bgcolor=getRandColor(160, 200);
       Color linecolor=getRandColor(200, 250);
       Color fontcolor[]=new Color[6];
       Random random=new Random();
       for(int i=0;i<6;i++)
       {
        fontcolor[i]=new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110));
       }
       for(int i=0;i<6;i++)
       {
        frame=this.getImage(bgcolor,linecolor,fontcolor,rands,font,i);
       agf.addFrame(frame);
       frame.flush();
       } 
       agf.finish();
     }
     private BufferedImage getImage(Color bgcolor,Color linecolor,Color[] fontcolor,String str[],Font[] font,int flag)
     {
      BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
      //或得图形上下文
      Graphics2D g2d=image.createGraphics();
      //利用指定颜色填充背景
      g2d.setColor(bgcolor);
      g2d.fillRect(0, 0, width, height);
      //画背景线 4*4
      g2d.setColor(linecolor);
      for (int i = 0; i < height/4; i++) {   g2d.drawLine(0, i*4, width, i*4);
      }
      for (int i = 0; i <width/4; i++) {   g2d.drawLine(i*4, 0, i*4, height);
      }
      AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.2f);
         g2d.setComposite(ac);
         g2d.setFont(new Font("隶书", Font.ITALIC+Font.BOLD, 26));
        g2d.setColor(Color.red);
      g2d.drawString("jalion制作", 19, 25);
      
      
      //以下生成验证码 //透明度从0 循环到1 步长为0.2 。一共6个字母
      AlphaComposite ac3 =null;
      String random=null;
      for(int i=0;i<str.length;i++)
      {
       g2d.setFont(font[i]);
       ac3 = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, getAlpha(flag, i));
        g2d.setComposite(ac3);
       g2d.setColor(fontcolor[i]);
       
       g2d.drawString(str[i], 25 * i + 8, 25);   
      }
      
      g2d.dispose();
      return image;
     }
     
     /**
      * 
      * @参数:
      * @返回值:
      * @描述:获得随机字体
      */
     private Font getFont()
     {
      //获得随机字体;
    //设置font :字体名称:Monotype Corsiva 华文彩云 方正舒体 华文行楷,隶书
      
      Random s=new Random();
      //int i=s.nextInt(10);
      int i=7;
      if(i%2==0)
      {
       return new Font("Monotype Corsiva", Font.BOLD, 28);
      }
      else if(i%3==0)
      {
       return new Font("方正舒体", Font.BOLD, 28);
      }
    //  else if(i%5==0)
    //  {
    //   return new Font("华文行楷", Font.BOLD, 28);
    //  }
      else if(i%7==0)
      {
       return new Font("隶书", Font.BOLD, 28);
      }
      else
      {
       return new Font("方正舒体", Font.BOLD, 28);
      }
     }
     
     
     /**
      * 
      * @参数:
      * @返回值:
      * @描述:获得循环透明度,从0到1 步长为0.2
      */
     private float getAlpha(int i,int j)
     {
      if((i+j)>5)
      {
       
       return ((i+j)*0.2f-1.2f);
      }
      else
      {
       return (i+j)*0.2f;
      }
     }
     /**
      * @参数:
      * @返回值:
      * @描述:获得随机色
      */
     private Color getRandColor(int fc, int bc) {// 给定范围获得随机颜色
      Random random = new Random();
      if (fc > 255)
       fc = 255;
      if (bc > 255)
       bc = 255;
      int r = fc + random.nextInt(bc - fc);
      int g = fc + random.nextInt(bc - fc);
      int b = fc + random.nextInt(bc - fc);
      return new Color(r, g, b);
     }
      /**
       * 返回[from,to)之间的一个随机整数
       * 
       * @param from 起始值
       * @param to 结束值
       * @return  [from,to)之间的一个随机整数
       */
      private int randomInt(int from,int to){
       Random r = new Random();
       return from+r.nextInt(to-from);
      }
    }下面是Servlet代码import java.io.IOException;
    import java.io.PrintWriter;import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;public class Yanzhengma extends HttpServlet {
     // Initialize global variables
     public void init() throws ServletException {
     }  public void doGet(HttpServletRequest request, HttpServletResponse response)
       throws ServletException, IOException {
      response.setContentType("image/gif");
      response.setHeader("Pragma", "No-cache");
      response.setHeader("Cache-Control", "no-cache");
      response.setDateHeader("Expires", 0);   new Test2().myTest(response.getOutputStream());  }  public void doPost(HttpServletRequest request, HttpServletResponse response)
       throws ServletException, IOException {
      doGet(request, response);
     }  // 这是POST,和GET差不多,不过HTTP有POST和GET两种请求方式罢了
     // Clean up resources
     public void destroy() {  }
    }
      

  2.   

    我尝试了一下 可以生成的啊。
    package a;import java.io.IOException;
    import java.awt.image.BufferedImage;
    import java.awt.Graphics;
    import javax.imageio.ImageIO;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;public class imageServlet extends HttpServlet { /**
     * Constructor of the object.
     */
    public imageServlet() {
    super();
    } /**
     * Destruction of the servlet. <br>
     */
    public void destroy() {
    super.destroy(); // Just puts "destroy" string in log
    // Put your code here
    } public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException { response.setContentType("image/gif");
    BufferedImage img = new BufferedImage(100, 100,
    BufferedImage.TYPE_INT_RGB);
    Graphics gra = img.getGraphics();
    gra.drawString("测试", 10, 10);
    gra.dispose();
    ImageIO.write(img, "GIF", response.getOutputStream());
    } public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException { this.doGet(request, response);
    } public void init() throws ServletException {
    // Put your code here
    }}
      

  3.   

    2楼的:我拿你的代码也尝试了一下,不可以生成的.只有个红叉.生成png是可以的.
      

  4.   

    我这里也看到图片, 难道是jdk版本问题!!  joejoe1991  你用的是那个版本的??
      

  5.   

    换成1.6 确实可以生成gif图了
      

  6.   

    cursor_wang不错,但不是透明图.  我只想要透明图而并非GIF动画.