【问题标题】:How do I downscale a BufferedImage to a specific number of pixels如何将 BufferedImage 缩小到特定数量的像素
【发布时间】:2021-09-06 01:49:36
【问题描述】:

我有一个 1000 像素 X 1000 像素的图像,我该如何处理并将其缩小到 250x250 像素并从中获得一个可用的 rgb 颜色值数组

我尝试使用 Java 的 Graphics2D,但事实证明这并没有真正减少像素数量

BufferedImage result = new BufferedImage(128, 128, BufferedImage.TYPE_INT_ARGB);
Graphics2D gra = result.createGraphics();
gra.drawImage(ImageIO.read(new File("")), 0, 0, 128, 128, null);
gra.dispose();
System.out.println(ImageIO.write(result, "png", new File("")));

【问题讨论】:

    标签: java image-processing pixel bufferedimage


    【解决方案1】:

    您发布的代码有效,您只需要正确指定文件名。我将它指向一个 3024x3024 的图像,并将其保存为 128x128 图像。

        BufferedImage result = new BufferedImage(128, 128, BufferedImage.TYPE_INT_ARGB);
        Graphics2D gra = result.createGraphics();
        gra.drawImage(ImageIO.read(new File("/tmp/3024x3024.jpeg")), 0, 0, 128, 128, null);
        gra.dispose();
        System.out.println(ImageIO.write(result, "png", new File("/tmp/128x128.png")));
    

    【讨论】:

    • 但是像素数量是 128x128 吗?在那种情况下,我如何从中得到一个数组?
    • 尺寸是在构建 BufferedImage 时定义的。您可以 drawImage 和 drawText 并执行许多其他编辑操作,但是写入这些内容的大小“画布”将始终保持不变。如果您实际要查找的是像素数组,那么您可以使用 byte[] pixel = ((DataBufferByte) image.getRaster().getDataBuffer()).getData();
    • 要记住两件事:1) Graphics2D.drawImage() 可能会在绘制完成之前返回 (stackoverflow.com/questions/14532757/…) 2) 使用任何带有 Alpha 通道的格式(ARGB、RGBA 等)将阻止您保存到图像没有 Alpha 通道的格式(如 JPEG)
    猜你喜欢
    • 2018-04-19
    • 2012-08-05
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多