java中载入图片的白色背景如何去掉?

private static Toolkit tk = Toolkit.getDefaultToolkit();方法载入的图,但是都有白色的背景,对象始终是矩形的,无法达到不规则图形。如何解决这个问题?
怎么让图片的白底变成透明呢?

你不理解图片是怎么表示的,普通的位图都是矩形区域,读到程序里就是一个每个像素点值的二维数组,像素的表示有多种情况,常见的是三基色红、绿、蓝 24 位整型数值表示,像 jpeg、bmp 等都是,是不带透明的。所谓透明那是因为有除了三原色值外的其他信息,例如 alpha 值,这样每个像素就占 32 位,它只是看起来是透明的而已,实际上还是一个矩形。

原来的图片要是不带透明的那你得把每个像素进行转换才能让它透明。swing 里处理图片比较麻烦,感觉还不如 swt 来的方便,你还不如预先把图片用软件处理成 png 的再用。

-------------------------------------------------------------
用图片处理软件(如 ps)把背景 p 掉。当然你也可以网上找个好用一点的软件把背景 p 掉。总之预先把背景 p 掉。
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-09-09
package com.picture;  
  
import java.awt.Graphics2D;  
import java.awt.image.BufferedImage;  
import java.io.File;  
import java.io.IOException;  
import java.util.regex.Pattern;  
  
import javax.imageio.ImageIO;  
import javax.swing.ImageIcon;  
import javax.swing.JOptionPane;  
  
public class Picture {  
  
    public static void convert(String path) {  
        // TODO Auto-generated constructor stub  
        try {  
            BufferedImage image = ImageIO.read(new File(path));  
            ImageIcon imageIcon = new ImageIcon(image);  
            BufferedImage bufferedImage = new BufferedImage(  
                    imageIcon.getIconWidth(), imageIcon.getIconHeight(),  
                    BufferedImage.TYPE_4BYTE_ABGR);  
            Graphics2D g2D = (Graphics2D) bufferedImage.getGraphics();  
            g2D.drawImage(imageIcon.getImage(), 0, 0,  
                    imageIcon.getImageObserver());  
            int alpha = 0;  
            for (int j1 = bufferedImage.getMinY(); j1 < bufferedImage  
                    .getHeight(); j1++) {  
                for (int j2 = bufferedImage.getMinX(); j2 < bufferedImage  
                        .getWidth(); j2++) {  
                    int rgb = bufferedImage.getRGB(j2, j1);  
                    if (colorInRange(rgb))  
                        alpha = 0;  
                    else  
                        alpha = 255;  
                    rgb = (alpha << 24) | (rgb & 0x00ffffff);  
                    bufferedImage.setRGB(j2, j1, rgb);  
                }  
            }  
            g2D.drawImage(bufferedImage, 0, 0, imageIcon.getImageObserver());  
            // 生成图片为PNG  
            String outFile = path.substring(0, path.lastIndexOf("."));  
            ImageIO.write(bufferedImage, "png", new File(outFile + ".png"));  
        } catch (IOException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
    }  
  
    public static boolean colorInRange(int color) {  
        int red = (color & 0xff0000) >> 16;  
        int green = (color & 0x00ff00) >> 8;  
        int blue = (color & 0x0000ff);  
        if (red >= color_range && green >= color_range && blue >= color_range)  
            return true;  
        return false;  
    }  
  
    public static int color_range = 210;  
    public static Pattern pattern = Pattern.compile("[0-9]*");  
  
    public static boolean isNo(String str) {  
        return pattern.matcher(str).matches();  
    }  
  
    /** 
     * @param args 
     */  
    public static void main(String[] args) {  
        // TODO Auto-generated method stub  
        String path = JOptionPane.showInputDialog(null, "请输入图片目录");  
        if (path == null || !new File(path).isDirectory()) {  
            JOptionPane.showMessageDialog(null, "输入目录有误!");  
            return;  
        }  
        String color = JOptionPane.showInputDialog(null, "请输入色差范围0~255(建议10~50)");  
        if (isNo(color)) {  
            color_range = 255 - Integer.parseInt(color);  
            File file = new File(path);  
            String[] files = file.list();  
            for (int i = 0; i < files.length; i++) {  
                String ext = files[i].substring(files[i].lastIndexOf(".") + 1);  
                if (ext.equals("jpg")) {  
                    convert(path + "//" + files[i]);  
                }  
            }  
            JOptionPane.showMessageDialog(null, "转换完成!");  
        } else {  
            JOptionPane.showMessageDialog(null, "输入的数字有误!");  
        }  
    }  
  
}

以上内容可以强制删除白色背景。

第2个回答  2015-08-22

    如果目的是在前台显示透明图片的话,建议用Png格式的图片,可以做成透明图片;

    java中有BufferedImage类,用BufferedImage读取图片,有getRGB(x,y)方法,获取坐标的像素值,逐个扫描所有点(根据 getWidth()和getHeight())判断是否为白色,setRGB(x, y, c & 0x00ffffff)设置改点为透明。只不过效率可能很低。

第3个回答  2010-06-25
你先确定 你的图是否有白底!!!! 不规则图形不是说程序怎样?
你的图只要是透明背景的话 那载入进来绝对是可以正常显示的 不会说什么始终是个矩形! 你目前看到的矩形 可能是因为图有个白色的底!

用ps啊将你的图的背景设置为透明的!!!
第4个回答  2015-08-25

图片的白色背景一般是需要处理图片的,相关步骤为:

    将图片处理为png图片

    将png图片设置为控件的背景图片

java中载入图片的白色背景如何去掉?
用图片处理软件(如 ps)把背景 p 掉。当然你也可以网上找个好用一点的软件把背景 p 掉。总之预先把背景 p 掉。

Eclipse里行号和代码中间的背景颜色在哪改?就是图片中的白色部分。
Preferences>>Java>>Editor>>Folding标签页,把Enable folding选项的勾去掉,然后Apply,再把Enable folding选项勾回来,再Apply就好了。。。

JAVA 如何将图片进行反白操作
如果你是想要黑白底片效果的话,那很简单,在“图象-调整-去色”之后,再“图象-调整-反相”就OK了。如果要是要人物是黑色,背景白色的话,首先需要把人物先扣选出来,然后可以使用“图象-调整-变化”或者油漆桶、画笔等工具对人物和背景分别修改。(修改时,请注意正在编辑的是哪个选区,选的时候也可...

如何在java中去掉SWing组件的背景中白色的地方换成透明的?
bufferedImage=g.getDeviceConfiguration().createCompatibleImage(imageIcon.getIconWidth(), imageIcon.getIconHeight(), Transparency.TRANSLUCENT);g.dispose();g=bufferedImage.createGraphics();g.drawImage(imageIcon.getImage(), 0, 0, null);

怎么用java实现抠图功能?
import java.io.*;public class ImageUtils { \/ 图片去白色的背景,并裁切 param image 图片 param range 范围 1-255 越大 容错越高 去掉的背景越多 return 图片 throws Exception 异常 \/ public static byte[] transferAlpha(Image image, InputStream in, int range) throws Exception { Byte...

为什么java的setBackground()不管用,代码如下,背景色一直是白的,麻烦帮...
你的代码里没绘制背景的代码 ,而且,你也没有调用父类的方法,去绘制 我帮你改改 public void paint(Graphics g) {setBackground(Color.cyan);super.paint(g);Graphics2D g2 = (Graphics2D) g;int red, green, blue;red = 255;blue = 255;green = 0;g2.setPaint(new Color(red, green,...

如何把java开发软件的背景调颜色,白色实在太亮了!求指导啊
不知道你说的是不是eclipse的编辑区域的背景,我估且认为是吧。打开菜单Windows->Preferences在弹出的界面中,选择General->Editor->Text Editors,在右边的界面中的Appearance color options中选择Background color,取消勾选右边的System Default,然后就可以选择自己想要的颜色了。

java Captcha 去掉背景
可以注意到每个验证码数字或字母都是同一颜色,所以把验证码平均分成5份。计算每个区域的颜色分布,除了白色之外,颜色值最多的就是验证码的颜色,因此很容易将javaCaptcha背景去掉。

java图片如何补余白
重新画一张图,背景设置为白色,尺寸为400*400,在x=0,y=50处插入400*300的图片即可。

java用BufferedImage和Graphics画图传到页面背景为黑色如何设置成透明...
BufferedImage单独显示就是黑色的,但是你可以在上面画各种颜色的东西,你导入的图片是白色就是白色,不会被覆盖的 如果你不想要黑色,你就弄一张白色的图片覆盖在 BufferedImage上就行了

相似回答