JAVA图片透明处理

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

你可能感兴趣的:(JAVA图片透明处理)