使用从头创建的java将彩色图像转换为黑白图像

时间:2016-12-09 06:42:39

标签: java image-processing java-8 bufferedimage graphics2d

我想将我的照片从彩色转换为黑白照片,这似乎是从头开始创建的。 这是我在不同帖子中描述的代码:

    BufferedImage bi = ImageIO.read(new File("/Users/***/Documents/Photograph.jpg"));
    ColorConvertOp op = 
        new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_GRAY), null);
    ImageIO.write(bi, "PNG", new File("/Users/bng/Documents/rendered2.png"));
    op.filter(bi, bi);

但我的图像仍未转换为黑白图像。此外,此代码将rendered2.png图像大小增加到10倍。 而且,如果我能找到一些Java 8的方法,那将是很棒的。 有什么建议吗?

3 个答案:

答案 0 :(得分:2)

以下代码对我有用:

    BufferedImage input = ImageIO.read(new File("/Users/bng/Documents/Photograph.jpg"));
    // Create a black-and-white image of the same size.
    BufferedImage im = new BufferedImage(input.getWidth(), input.getHeight(), BufferedImage.TYPE_BYTE_BINARY);
    // Get the graphics context for the black-and-white image.
    Graphics2D g2d = im.createGraphics();
    // Render the input image on it.
    g2d.drawImage(input, 0, 0, null);
    // Store the resulting image using the PNG format.
    ImageIO.write(im, "PNG", new File("/Users/bng/Documents/rendered.png"));

BufferedImage.TYPE_BYTE_BINARY为我提供了确切的解决方案。 为上面的代码寻找Java 8版本。

答案 1 :(得分:1)

  1. 您必须找到要更改图像的现有颜色的RGB。
  2. Fyi,你想改变它,因为白色RGB值是(255,255,255),黑色RGB值是(0,0,0)

  3. 如果您采用正确的要求方式,以下方法可以轻松进行颜色更改

    private BufferedImage changeColor(BufferedImage image, int srcColor, int replaceColor)
    {
        BufferedImage destImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB);
        Graphics2D g = destImage.createGraphics();
        g.drawImage(image, null, 0, 0);
        g.dispose();
    
    
        for (int width = 0; width < image.getWidth(); width++)
        {
            for (int height = 0; height < image.getHeight(); height++)
            {
    
               if (destImage.getRGB(width, height) == srcColor)
                {
                   destImage.setRGB(width, height, replaceColor);
                }
    
            }
        }
    
        return destImage;
    }
    

答案 2 :(得分:0)

你必须以正确的方式使用ColorConvertOp

  1. 创建源图片
  2. 应用过滤器
  3. save dest
  4. 示例:

    BufferedImage src = ImageIO.read(new File("/Users/***/Documents/Photograph.jpg"));
    
    ColorConvertOp op = 
        new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_GRAY), null);
    BufferedImage dest = op.filter(src, null);
    
    ImageIO.write(dest, "PNG", new File("/Users/bng/Documents/rendered2.png"));
    

    的src: enter image description here

    DEST: enter image description here