2017-11-20 8 views
1

ファイルを取り込み、既存のPNGで白いピクセルだけを透明にするように、以下のmakeWhiteTransparent()を実装する方法を知りたいと思います。それは完全に白いピクセルだけです(#FFFFFF)。PNGの白をJavaで透明にするには?

public static void main(String[] args) 
{ 
    File pngFile = new File(pathToPngFile); 
    File outputPngFile = new File(pathToOutputPngFile); 
    makeWhiteTransparent(pngFile, outputPngFile); 
} 

私はさらに、オープンソースライブラリを探していますが、ここではたくさんの回答を見つけることができますが、何も動作していないようです。それはコードが複雑で、何をしているのか分からない限り理解できませんでした(例えば、閾値など)。私は基本的には、私のPNGのすべての#FFFFFFピクセルを透明にしたいだけです。

答えて

2

チャンネルの残りの部分は255

private static void makeWhiteTransparent(File in, File out)throws IOException{ 
    BufferedImage bi = ImageIO.read(in); 
    int[] pixels = bi.getRGB(0, 0, bi.getWidth(), bi.getHeight(), null, 0, bi.getWidth()); 

    for(int i=0;i<pixels.length;i++){ 
     int color = pixels[i]; 
     int a = (color>>24)&255; 
     int r = (color>>16)&255; 
     int g = (color>>8)&255; 
     int b = (color)&255; 

     if(r == 255 && g == 255 && b == 255){ 
      a = 0; 
     } 

     pixels[i] = (a<<24) | (r<<16) | (g<<8) | (b); 
    } 

    BufferedImage biOut = new BufferedImage(bi.getWidth(), bi.getHeight(), BufferedImage.TYPE_INT_ARGB); 
    biOut.setRGB(0, 0, bi.getWidth(), bi.getHeight(), pixels, 0, bi.getWidth()); 
    ImageIO.write(biOut, "png", out); 
} 
である場合には、0にアルファチャンネルの値を設定するのと同じくらい簡単でなければなりません
関連する問題