莫眉 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 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度