随笔-179  评论-666  文章-29  trackbacks-0

 

源代码/**
   * 图二的位置 从左上角开始
   * @param x
   * @param y
   */
  public void createPicTwo(int x,int y)
  {
      try
      {
        //读取第一张图片
        File fileOne = new File("c:\\1.gif");
        BufferedImage ImageOne = ImageIO.read(fileOne);
        int width = ImageOne.getWidth();//图片宽度
        int height = ImageOne.getHeight();//图片高度
        //从图片中读取RGB
        int[] ImageArrayOne = new int[width*height];
        ImageArrayOne = ImageOne.getRGB(0,0,width,height,ImageArrayOne,0,width);
        //对第二张图片做相同的处理
        File fileTwo = new File("c:\\2.gif");
        BufferedImage ImageTwo = ImageIO.read(fileTwo);
        int widthTwo = ImageTwo.getWidth();//图片宽度
        int heightTwo = ImageTwo.getHeight();//图片高度
        int[] ImageArrayTwo = new int[widthTwo*heightTwo];
        ImageArrayTwo = ImageTwo.getRGB(0,0,widthTwo,heightTwo,ImageArrayTwo,0,widthTwo);
       
        //生成新图片
        BufferedImage ImageNew = new BufferedImage(width*2,height,BufferedImage.TYPE_INT_RGB);
        ImageNew.setRGB(0,0,width,height,ImageArrayOne,0,width);//设置左半部分的RGB
        ImageNew.setRGB(x,y,widthTwo,heightTwo,ImageArrayTwo,0,widthTwo);//设置右半部分的RGB
        File outFile = new File("c:\\out.png");
        ImageIO.write(ImageNew, "png", outFile);//写图片

      }
      catch(Exception e)
      {
        e.printStackTrace();
      }
  }



方法二:解决透明的问题

源代码/**
     *
     * @param filesrc
     * @param logosrc
     * @param outsrc
     * @param x 位置
     * @param y 位置
     */
  public void composePic(String filesrc,String logosrc,String outsrc,int x,int y) {
    try {
        File bgfile = new File(filesrc);
        Image bg_src = javax.imageio.ImageIO.read(bgfile);
       
        File logofile = new File(logosrc);
        Image logo_src = javax.imageio.ImageIO.read(logofile);
       
        int bg_width = bg_src.getWidth(null);
        int bg_height = bg_src.getHeight(null);
        int logo_width = logo_src.getWidth(null);;
        int logo_height = logo_src.getHeight(null);

        BufferedImage tag = new BufferedImage(bg_width, bg_height, BufferedImage.TYPE_INT_RGB);
       
        Graphics2D g2d = tag.createGraphics();
        g2d.drawImage(bg_src, 0, 0, bg_width, bg_height, null);
       
        g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,1.0f)); //透明度设置开始 
        g2d.drawImage(logo_src,x,y,logo_width,logo_height, null);           
        g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER)); //透明度设置 结束
       
        FileOutputStream out = new FileOutputStream(outsrc);
        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
        encoder.encode(tag);
        out.close();
    }catch (Exception e) {
        e.printStackTrace();
    }
  }

  public static void main(String args[]) {
      Long star = System.currentTimeMillis();
      TwoComposePic pic = new TwoComposePic();
      pic.composePic("c:\\bb.gif","c:\\bc.gif","c:\\out_pic.gif",490,360);
      Long end =System.currentTimeMillis();
      System.out.print("time====:"+(end-star));
  }

posted on 2007-08-20 16:01 Alpha 阅读(6927) 评论(3)  编辑  收藏 所属分类: Java J2EE JSP

评论:
# re: java 图片合成 解决图片失真问题 2013-05-24 10:51 | 鲍俊虎
请问为什么我合成的图片右边是全黑的啊,急!!!  回复  更多评论
  
# re: javhttp://www.blogjava.net/Modules/CaptchaImage/JpegImage.aspx?cacheid=20130729150734a 图片合成 解决图片失真问题 2013-07-29 15:16 | http://wwwhttp://www.blogjava.net/Modules/CaptchaI
# re: java 图片合成 解决图片失真问题[未登录] 2013-10-09 11:45 | 卡卡
你的底图宽度不够吧?@鲍俊虎
  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: