JAVA圖片透明處理__JAVA

來源:互聯網
上載者:User

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.