public static void main(String[] args) {<br /> try {<br /> BufferedImage image = ImageIO<br /> .read(new FileInputStream("f://1.jpg"));<br /> // 讀取表徵圖<br /> BufferedImage imageBiao = ImageIO.read(new FileInputStream(<br /> "f://3.png"));<br /> Graphics2D g = image.createGraphics();<br /> // g.setColor(Color.YELLOW);<br /> // g.setFont(new Font("華文中宋", Font.LAYOUT_LEFT_TO_RIGHT, 48));<br /> // g.drawString("映像合成樣本",100, image.getHeight() - 400);<br /> // 寫入表徵圖<br /> ImageFilter imgf = new MyFilter(255);<br /> FilteredImageSource fis = new FilteredImageSource(imageBiao<br /> .getSource(), imgf);<br /> Image im = Toolkit.getDefaultToolkit().createImage(fis);<br /> g.drawImage(im, 0, 0, imageBiao.getWidth(null), imageBiao<br /> .getHeight(null), null);<br /> g.dispose();<br /> FileOutputStream out = new FileOutputStream("f://表徵圖文字合成3.gif");<br /> JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);<br /> encoder.encode(image);<br /> out.close();<br /> // 把以上原圖和加標後的映像<br /> } catch (Exception e) {<br /> e.printStackTrace();<br /> }<br />}<br />}<br />class MyFilter extends RGBImageFilter {// 抽象類別RGBImageFilter是ImageFilter的子類,<br /> // 繼承它實現圖象ARGB的處理<br />int alpha = 0;<br />public MyFilter(int alpha) {// 構造器,用來接收需要過濾圖象的尺寸,以及透明度<br /> this.canFilterIndexColorModel = true;<br /> // TransparentImageFilter類繼承自RGBImageFilter,它的建構函式要求傳入原始圖象的寬度和高度。<br /> // 該類實現了filterRGB抽象函數<br /> // ,預設的方式下,該函數將x,y所標識的象素的ARGB值傳入,程式員按照一定的程式邏輯處理後返回該象素新的ARGB值<br /> this.alpha = alpha;<br />}<br />public int filterRGB(int x, int y, int rgb) {<br /> DirectColorModel dcm = (DirectColorModel) ColorModel.getRGBdefault();<br /> // DirectColorModel類用來將ARGB值獨立分解出來<br /> int red = dcm.getRed(rgb);<br /> int green = dcm.getGreen(rgb);<br /> int blue = dcm.getBlue(rgb);<br /> int alp=dcm.getAlpha(rgb);<br />if(red==255&&blue==255&&green==255){// 如果像素為白色,則讓它透明<br /> alpha = 0;<br />}else{<br /> alpha=255;<br /> }<br /> //if (alp==0) {//png和gif格式圖片透明部分仍然透明<br /> // alpha = 0;<br />// }else{<br />// alpha = 255;<br /> //}<br /> return alpha << 24 | red << 16 | green << 8 | blue;// 進行標準ARGB輸出以實現圖象過濾<br />}<br />如果這樣的話是可以是可以達到效果的,但是白色遇其他顏色交接的地方老出現鋸齒,是不是失真啊<br />後來找了些png和gif的圖片將中間白色的扣掉了,以為直接合成就可以了,但是不行,還要加上對alpha的判斷<br />//if (alp==0) {//png和gif格式圖片透明部分仍然透明<br /> // alpha = 0;<br />// }else{<br />// alpha = 255;<br /> //}<br />不過效果還是不好,但比前面將白色透明的效果過好多了,所以還是將圖片先處理一下再調用程式<br />這些都是將圖片部分透明的,如果想全部一起透明的話,建議使用 AlphaComposite 類的getInstance (int rule, float alpha)方法設定alpha的值</p><p>原文出處:http://hi.baidu.com/berry_0712/blog/item/6a28190f7ce02c2d6059f3e2.html<br />