對於此項,主要是爲了實現綠色小圓點根據動態數據顯示在不同的位置,如下圖所示:
然後做了兩個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;
}
以上方法完美解決問題,並實現了想要的效果