【问题标题】:Mimetypes for ImageIO read() and write()ImageIO read() 和 write() 的 Mimetypes
【发布时间】:2013-09-04 12:55:36
【问题描述】:

我正在尝试使用 Mime 类型来定义 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)

这似乎要复杂得多,需要ImageWriterIIOStream 等,而我还没有设法创建解决方案。

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

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

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

【问题讨论】:

  • "..或者没有解决方法?"'解决方法'是为了什么?您没有在该问题中提及任何“错误”。
  • 对不起 - 我应该写“达到相同目的的代码”
  • @AndrewThompson:他最近的编辑是否让您更好地了解他的问题?对于他想要做什么以及他目前的解决方案如何失败,我仍然有点困惑。
  • 我没有当前的解决方案 - 我不知道应该使用哪些类。
  • @HovercraftFullOfEels 不,不是。我会忽略 mime 类型,只需选择ImageIO 返回的文件类型之一 - 并完成它。我认为这样做没有任何好处。

标签: java mime-types javax.imageio


【解决方案1】:

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

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 更正编辑)。

【讨论】:

    【解决方案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 读取或写入方法。

    【讨论】:

    • 谢谢。我已经采用了您的解决方案,但它似乎很脆弱(例如,可能存在区分大小写的问题)。我想一定有更好的方法。
    • @peter murray rust:MIME 描述应该是小写的。正如您在我的回答中看到的那样,非正式格式是大写和小写的。剥离“image/”时可以使用 toLowerCase 方法。
    • 明白。但是我们可能对JPEG和JPG等类型有问题。 MIME 类型格式是否总是被支持为非正式的?
    • @peter murray rust:我不确定我是否理解你的问题。 MIME 是图像/JPEG。 jpeg 是 ImageIO 非正式格式之一。 image/jpg 不在 MIME 列表中,尽管它可能会被使用。 jpg 是 ImageIO 非正式格式之一。
    • @peter murray rust:这是我使用的 MIME 列表 - freeformatter.com/mime-types-list.html
    猜你喜欢
    • 2016-06-20
    • 1970-01-01
    • 2019-04-03
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多