如何在Java中使PNG的白色透明?

如何在Java中使PNG的白色透明?,java,image,Java,Image,我想知道如何实现下面的makeWhiteTransparent(),这样它就需要一个文件,并且在我现有的PNG中只使白色像素透明。这只是完美的白色像素(#FFFFFF) 我甚至还寻找了开源库,除了在这里找到了一堆答案,但似乎什么都不起作用。这或代码很复杂,除非您知道自己在做什么,否则很难理解(例如阈值等)。基本上,我只希望我的PNG中的所有#FFFFFF像素都是透明的。如果其余通道的值为255,则只需将Alpha通道的值设置为0即可 private static void makeWhiteTr

我想知道如何实现下面的
makeWhiteTransparent()
,这样它就需要一个文件,并且在我现有的PNG中只使白色像素透明。这只是完美的白色像素(#FFFFFF)


我甚至还寻找了开源库,除了在这里找到了一堆答案,但似乎什么都不起作用。这或代码很复杂,除非您知道自己在做什么,否则很难理解(例如阈值等)。基本上,我只希望我的PNG中的所有#FFFFFF像素都是透明的。

如果其余通道的值为255,则只需将Alpha通道的值设置为0即可

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);
}
private static void makeWhiteTransparent(文件输入,文件输出)抛出IOException{
BuffereImage bi=ImageIO.read(in);
int[]pixels=bi.getRGB(0,0,bi.getWidth(),bi.getHeight(),null,0,bi.getWidth());
对于(int i=0;i>24)&255;
int r=(颜色>>16)和255;
int g=(颜色>>8)和255;
intb=(颜色)&255;
如果(r==255&&g==255&&b==255){
a=0;
}
像素[i]=(a)
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);
}