【问题标题】:Does ImageIO.read() always return BufferedImage with transparency?ImageIO.read() 是否总是返回具有透明度的 BufferedImage?
【发布时间】:2014-12-09 03:11:25
【问题描述】:

标题说明了一切。 假设我有以下代码:

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

图像的类型是否总是BufferedImage.TYPE_INT_ARGB 或其他带有 Alpha 通道的类型? (我正在使用 Java 8 顺便说一句)

【问题讨论】:

  • 理论上它应该只在图像支持透明度的情况下返回具有透明度的图像,但这将归结为用于加载图像的插件......

标签: java image transparency bufferedimage javax.imageio


【解决方案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

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

【讨论】:

  • 这将取决于插件的实现,并且可能在 JVM 之间或基于用户安装的内容而改变。
  • 主要是缓冲图像适应,而不是适应什么。 :)
  • 并非如此,BufferedImage 是它创建的结果。您可以轻松地将非透明图像加载到 BufferedImage 中,而不会更改其类型...
  • 它与问题相关,根据他提供的代码,它会适应。
  • 但不是BufferedImage在适应,而是用于加载该类型图像的插件如何决定创建哪种类型的BufferedImage。所以,换插件,换结果……
【解决方案2】:

简短回答:不。并非总是如此。它可以是任何类型。

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

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

【讨论】:

    猜你喜欢
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 2021-08-07
    • 2012-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多