莫眉 2017-12-06 07:07 采纳率: 0%
浏览 3804

可以使用java将PNG图片的(特定颜色)灰色处理为透明色

求大佬解答,怎么做。。。。。。。。。。。。。。。。。。。。。。。。。。。

  • 写回答

5条回答 默认 最新

  • zshzsh1994 2017-12-06 10:00
    关注

    import java.awt.Color;
    import java.awt.image.*;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.Toolkit;
    import java.io.File;
    import java.io.FileInputStream;
    import javax.imageio.ImageIO;

    public class Test2 extends RGBImageFilter {// 抽象类RGBImageFilter是ImageFilter的子类,

    public static void main(String[] args) {
        try {
            BufferedImage imageBiao = ImageIO.read(new FileInputStream("e:\\1.png"));
            ImageFilter imgf = new Test2(Color.WHITE.getRGB()); //白色
            FilteredImageSource fis = new FilteredImageSource(imageBiao.getSource(), imgf);
            Image im = Toolkit.getDefaultToolkit().createImage(fis);
            im.flush();
            BufferedImage newImage = new BufferedImage(imageBiao.getWidth(), imageBiao.getHeight(), BufferedImage.TYPE_INT_ARGB);
            Graphics2D g = newImage.createGraphics();
            g.drawImage(im, 0, 0, null);
            g.dispose();
            newImage.flush();
            ImageIO.write(newImage, "png", new File("e:\\b.png"));
            // 把以上原图和加上图标后的图像
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    // 继承它实现图象ARGB的处理
    int rgb = 0;
    
    public Test2(int rgb) {// 构造器,用来接收需要过滤图象的尺寸,以及透明度
        this.canFilterIndexColorModel = true;
        this.rgb = rgb;
    }
    DirectColorModel dcm = (DirectColorModel) ColorModel.getRGBdefault();
    
    public int filterRGB(int x, int y, int rgb) {
        int alp = dcm.getAlpha(rgb);
        if (dcm.getRGB(rgb) == dcm.getRGB(this.rgb)/* || alp == 0*/) {// 如果像素为白色,则让它透明
            alp = 0;
    

    // return Color.black.getRGB();//测试,透明的变成黑色
    }
    return alp << 24 | dcm.getRGB(rgb);// 进行标准ARGB输出以实现图象过滤
    }
    /*//这样不是再简单
    public int filterRGB(int x, int y, int rgb) {
    if ((this.rgb & 0xffffff) == (rgb & 0xffffff)) {
    return 0;
    }
    return rgb;
    }
    */
    }

    这段代码可以把白色转换成透明,你改一下应该就能用的。

    评论

报告相同问题?

悬赏问题

  • ¥15 安装svn网络有问题怎么办
  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献