javajavax。图像。ImageIO文件格式常量
在javax.imageio.ImageIO
中,有一个方法#write(RenderedImage im, String formatName, OutputStream output)
接受开发人员希望将图像写入的“字符串类型”格式
在该文件的深处有一个名为CanEncodeImageAndFormatFilter
的内部类,用于检查是否存在支持上述格式的SPI(无论它是什么)。例如,BMPImageWriterSpi
声明
private static String[] formatNames = {"bmp", "BMP"};
但在所有这些SPI类中,这些格式名要么声明为private,要么声明为package default,因此我无法在应用程序中访问它们。但我想在我现在正在开发的API中公开这个格式参数,但我不想重新发明轮子
➥ 是否有一个枚举或其他可以安全地用作#write
方法的格式名参数
是的,这更像是一个带有coding-style标记的基于意见的问题:D
UPD: 我所拥有的:
ImageIO.write(image, "jpg", outStream);
我想要的是:
ImageIO.write(image, ImageTypes.JPEG, outStream);
# 1 楼答案
在默认的Java API中没有这样的枚举
原因是Java映像I/O API使用Service provider interface (SPI)。它允许创建可扩展的应用程序。在问题的范围内,可以将其他图像读取器/写入器类(实现相应接口)添加到类路径中,并在运行时自动发现。应用程序甚至可以在编译时不知道它们的存在就使用它们。因此,这种枚举不存在
您可以通过以下代码片段发现所有当前已知的
ImageWriter
实现Java13的输出
下面是一个如何使用SPI的简化示例
假设当前目录中有以下文件
例如ImageWriterSpi。java
编译类
创建提供商配置文件
(文件名指定实现的接口,行指定实现的类)
为服务提供商创建存档
运行简单的示例代码
输出(属于Java运行时的所有服务提供商)
与其他服务提供商一起运行示例
输出
您可以自己创建枚举。但您应该在运行时检查是否有可用于此图像类型的提供程序。e、 g.在Java 9之前,TIFF在Java运行时中不可用