ImageIO.read()总是返回具有透明度的BufferedImage吗?

时间:2014-12-09 03:11:25

标签: java image transparency bufferedimage javax.imageio

标题解释了这一切。 假设我有以下代码:

BufferedImage image;
try {
    image = ImageIO.read(new File(path));
}
catch (Exception e) {
    e.printStackTrace();
}

图片的类型是{@ 1}}还是带alpha通道的其他类型? (我使用Java 8顺便说一句)

2 个答案:

答案 0 :(得分:1)

从我的测试中看,BufferedImage似乎适应你的图像。

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.net.URL;

public class BufferedImageTest {

    public static void main(String[] args) {
        try {
            BufferedImage transparent = ImageIO.read(new URL("http://upload.wikimedia.org/wikipedia/commons/4/4a/Logo_2013_Google.png"));
            System.out.println(transparent.getType());
            BufferedImage solid = ImageIO.read(new URL("http://blacklabelsociety.com/home/wp-content/uploads/2014/01/spacer.jpg"));
            System.out.println(solid.getType());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

输出

6
5

6 = BufferedImage.TYPE_4BYTE_ABGR

5 = BufferedImage.TYPE_3BYTE_BGR

第一张图片有透明度,而第二张图片没有。

答案 1 :(得分:0)

简答:不。不总是。它可以是任何类型。

更长的回答: 如果读取的图像具有alpha通道,ImageIO.read(...)应该只返回带alpha的图像类型,但正如@MadProgrammer在他的评论中所说,这是特定于插件的。我所知道的大多数ImageReader插件都会返回最多的#34;自然"输入的类型,即最接近输入文件的本机格式的输入。

然而,可以指定所需的图像类型,甚至可以指定要加载的目标图像。为此,您需要获取要阅读的格式的ImageReader实例,并将类型或图片传递给setDestination(...)上的setDestinationType(...)ImageReadParam方法