gpt4 book ai didi

java - 在 Java 中检查图像是否全白或完全透明

转载 作者:行者123 更新时间:2023-12-01 11:21:02 25 4
gpt4 key购买 nike

我正在调用一个网址来在本地获取图像存储,它已经可以工作,但我只是想确定图像是否全白或完全透明,以便我可以跳过图像。

URL url = new URL(logoUrl);
InputStream is = url.openStream();
String fileName = logoUrl.substring(logoUrl.lastIndexOf('/') + 1);
//call other service to upload image as byte array.
uploadService.writeFile(request, fileName, IOUtils.toByteArray(is));

最佳答案

您必须检查所有像素,以检查您的图像是全白还是全透明。使用 PixelGrabber 获取所有像素。如果发现任何非完全透明或非白色像素,则图像有效。这是代码:

public static boolean isValid(String imageUrl) throws IOException, InterruptedException {
URL url = new URL(imageUrl);
Image img = ImageIO.read(url);
//img = img.getScaledInstance(100, -1, Image.SCALE_FAST);
int w = img.getWidth(null);
int h = img.getHeight(null);
int[] pixels = new int[w * h];
PixelGrabber pg = new PixelGrabber(img, 0, 0, w, h, pixels, 0, w);
pg.grabPixels();
boolean isValid = false;
for (int pixel : pixels) {
Color color = new Color(pixel);
if (color.getAlpha() == 0 || color.getRGB() != Color.WHITE.getRGB()) {
isValid = true;
break;
}
}
return isValid;
}

您应该调整图像大小以解决性能问题,这样您就不会遍历所有像素:

img = img.getScaledInstance(300, -1, Image.SCALE_FAST);

注意:调整大小可能会错过可能包含白色以外颜色的小区域。因此这个算法失败了。但这种情况很少发生

编辑:
这是以下图像的测试运行:

  1. 带有 url /image/GqRSB.png 的白色图像:
    enter image description here
    System.out.println(isValid("/image/GqRSB.png"));
    输出:假

  2. 带有 url /image/n8Wfi.png 的透明图像:
    enter image description here
    System.out.println(isValid("/image/n8Wfi.png"));
    输出:假

  3. 有效图像,网址为 /image/Leusd.png :
    enter image description here
    System.out.println(isValid("/image/Leusd.png"));
    输出:true

关于java - 在 Java 中检查图像是否全白或完全透明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31228443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com