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