Copy two BufferedImages into one image side by side

后端 未结 2 1286
刺人心
刺人心 2020-12-24 15:31

I have two images and I\'d like to copy these two images to a new image where the second image is beside the first image and not on top of it.

BufferedImage          


        
相关标签:
2条回答
  • 2020-12-24 16:03

    I created a demo for you and also a unit test, hope it works!

    Code:

    import java.awt.Color;
    import java.awt.Graphics2D;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import javax.imageio.ImageIO;
    /**
     * This code try to join two BufferedImage
     * @author wangdq
     * 2013-12-29
     */
    public class JoinImage {
        public static void main(String args[])
        {   
            String filename = System.getProperty("user.home")+File.separator;
            try {
                BufferedImage img1 = ImageIO.read(new File(filename+"1.png"));
                BufferedImage img2=ImageIO.read(new File(filename+"2.png"));
                BufferedImage joinedImg = joinBufferedImage(img1,img2);
                boolean success = ImageIO.write(joinedImg, "png", new File(filename+"joined.png"));
                System.out.println("saved success? "+success);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        /**
         * join two BufferedImage
         * you can add a orientation parameter to control direction
         * you can use a array to join more BufferedImage
         */
    
        public static BufferedImage joinBufferedImage(BufferedImage img1,BufferedImage img2) {
    
            //do some calculate first
            int offset  = 5;
            int wid = img1.getWidth()+img2.getWidth()+offset;
            int height = Math.max(img1.getHeight(),img2.getHeight())+offset;
            //create a new buffer and draw two image into the new image
            BufferedImage newImage = new BufferedImage(wid,height, BufferedImage.TYPE_INT_ARGB);
            Graphics2D g2 = newImage.createGraphics();
            Color oldColor = g2.getColor();
            //fill background
            g2.setPaint(Color.WHITE);
            g2.fillRect(0, 0, wid, height);
            //draw image
            g2.setColor(oldColor);
            g2.drawImage(img1, null, 0, 0);
            g2.drawImage(img2, null, img1.getWidth()+offset, 0);
            g2.dispose();
            return newImage;
        }
    }
    
    0 讨论(0)
  • 2020-12-24 16:17
    public static BufferedImage joinBufferedImage(BufferedImage img1,
          BufferedImage img2) {
        //int offset = 2;
        int width = img1.getWidth();
        int height = img1.getHeight() + img2.getHeight();
        BufferedImage newImage = new BufferedImage(width, height,
            BufferedImage.TYPE_INT_ARGB);
        Graphics2D g2 = newImage.createGraphics();
        Color oldColor = g2.getColor();
        g2.setPaint(Color.WHITE);
        g2.fillRect(0, 0, width, height);
        g2.setColor(oldColor);
        g2.drawImage(img1, null, 0, 0);
        g2.drawImage(img2, null, 0, img1.getHeight());
        g2.dispose();
        return newImage;
      }
    

    Modified your code to print one image on top of eachother(as in one after another)

    0 讨论(0)
提交回复
热议问题