代码之家  ›  专栏  ›  技术社区  ›  Dani Cricco

Java转换低内存占用的图像格式

  •  5
  • Dani Cricco  · 技术社区  · 14 年前

    我正在编写一个Web应用程序,允许用户以多种格式(例如png、jpg、bmp)上传图像。上传图像后,系统应将其转换为“png”,并将其缩放到预定义的分辨率。

    要转换图像,我使用简便的方法:

    javax.imageio.ImageIO.write(im, type, baos);
    

    问题就从这里开始。Image javax的第一个参数。imageio。ImageIO。写作是一门学问 RenderedImage .Java文档声明,唯一已知的实现是 BufferedImage .

    我试图找到一种方法来转换 java.awt.Image 到BuffereImage,但这似乎不可能。然而,有可能 draw an image on a BufferedImage .

    问题是,每次创建一个新的BuffereImage都非常耗费内存。我可以开始创建一个BuffereImage池,但我正在寻找聪明的/新的想法。

    5 回复  |  直到 14 年前
        1
  •  5
  •   muras    12 年前

    尝试使用Thumbnailator库: http://code.google.com/p/thumbnailator/

    示例代码:

    Thumbnails.of("large-picture.jpg")
            .scale(1.0)
            .outputFormat("png")
            .toOutputStream(os);
    

    库还提供了更像缩放、大小调整、裁剪、旋转、水印等功能。

        3
  •  1
  •   I82Much    14 年前

    您可以使用 subimage 在使用ImageIO时适当调整大小。写入方法

        4
  •  0
  •   Bill K    14 年前

    您可以查看BuffereImage的实现,并实现自己的(可能是基于文件的实现?)。这些课程一般都很直截了当,通常有50-70%的评论和清晰的文字。

    他们公布消息来源,为什么不利用它们呢?

        5
  •  0
  •   Thorbjørn Ravn Andersen    14 年前

    启动netpbm或imagemagick等本机转换器。