3

我正在尝试使用 Mime Types 来定义 ImageIO 的输出。简单的 write() 方法

public static boolean write(RenderedImage im,
            String formatName,
            OutputStream output)
                     throws IOException

使用“格式的非正式名称”。(例如“png”)。是否有一个简单的 mimetypes 等价物(例如“image/png”)或没有达到编写图像目的的代码?我发现的唯一起点是

public static Iterator<ImageWriter> getImageWritersByMIMEType(String MIMEType)

这似乎更复杂,需要ImageWriter等等IIOStream,我还没有设法创建一个解决方案。

更新:我使用 MIME 的原因是它是 SVG 中图像的正式部分,例如

 xlink:href="data:image/png;base64,iVBORw0KGgoAAAA...

使用它而不是将其转换为定义较少的“非正式”格式似乎是合适的。我设法为我的问题找到了一个精确的解决方案(在 java2s.com 中)并将其添加为答案。

4

2 回答 2

4

我现在在java2s 教程上找到了我的问题的正式解决方案

public class Main {
  static public void main(String args[]) throws Exception {
    int width = 200, height = 200;
    BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);

    Graphics2D ig2 = bi.createGraphics();
    ig2.fillRect(0, 0, width - 1, height - 1);

    Iterator imageWriters = getImageWritersByMIMEType("image/gif");
    ImageWriter imageWriter = (ImageWriter) imageWriters.next();
    File file = new File("filename.gif");
    ImageOutputStream ios = ImageIO.createImageOutputStream(file);
    imageWriter.setOutput(ios);
    imageWriter.write(bi);
  }

(由@haraldK 更正编辑)。

于 2013-09-04T14:07:29.863 回答
2

我在我的 Windows XP、Java 6 计算机上使用 getReaderFormatNames 方法打印了 ImageIO 非正式格式列表。

BMP, bmp, jpg, JPG, wbmp, jpeg, png, PNG, JPEG, WBMP, GIF, gif

以下是等效的 MIME 类型

image/bmp
image/jpeg
image/png
image/gif

我找不到 WBMP 格式的 MIME。

似乎您可以从 MIME 中剥离“image/”以将非正式格式传递给 ImageIO 读取或写入方法。

于 2013-09-04T13:27:35.213 回答