java導出pdf報告之七:合併兩個png圖片

對於此項,主要是爲了實現綠色小圓點根據動態數據顯示在不同的位置,如下圖所示:

然後做了兩個png圖片,一個是綠色的小圓點,一個是下方的低中高矩形圖片(設置顏色部分和文字部分比例2:1,低中高比例1:2:1)

剛開始實現是直接在圖形圖片上畫圓點圖片,結果發現圓點的顏色給丟了。

private String mergePicture(String srcPicture,String iconPicture,Double pos,String name) throws Exception {
        BufferedImage d = ImageIO.read(new FileInputStream(srcPicture));  //長方形
        BufferedImage b = ImageIO.read(new FileInputStream(iconPicture));  //圓點
        Graphics2D g = d.createGraphics();
            g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);
        g.drawImage(b, (int)(d.getWidth()*0.96), d.getHeight()/3 - b.getHeight()/2, null);
        g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));

        g.dispose();
        String filePath = picturePath + REPORT + "/" + name;
        ImageIO.write(d, "png", new File(filePath));
        return filePath;
}

生成的圖片如下:

後來改變了一下思路,先是創建一個透明畫布,然後再透明畫布上分別畫矩形圖片和圓點圖片

private String mergePicture(String srcPicture,String iconPicture,Double pos,String name) throws Exception {
        BufferedImage d = ImageIO.read(new FileInputStream(srcPicture)); //長方形
        BufferedImage b = ImageIO.read(new FileInputStream(iconPicture));  //圓點
        //創建透明畫布
        BufferedImage bi = new BufferedImage(d.getWidth(),d.getHeight(),BufferedImage.TYPE_INT_RGB);
        Graphics2D g = bi.createGraphics();
        bi = g.getDeviceConfiguration().createCompatibleImage(d.getWidth(),d.getHeight(),Transparency.TRANSLUCENT);
        g.dispose();

        //將矩形圖片畫到透明畫布上
        g = bi.createGraphics();
        g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);
        g.drawImage(d,0,0,null);

        //將圓點圖片畫到畫布上
        //圓點圖象的路徑 水印一般爲gif或者png的,這樣可設置透明度
        ImageIcon imgIcon = new ImageIcon(b);
        //得到Image對象。
        Image con = imgIcon.getImage();
        g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,1f));
        //表示水印圖片的座標位置(x,y)
        g.drawImage(con, (int)(d.getWidth()*pos/100), d.getHeight()/3 - b.getHeight()/2, null);
        g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
        g.dispose();

        String filePath = picturePath + REPORT + "/" + name;
        ImageIO.write(bi, "png", new File(filePath));
        return filePath;
    }

以上方法完美解決問題,並實現了想要的效果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章