Java2d缩略图。我可以从OS获取缩略图吗?

时间:2010-11-15 16:28:23

标签: java image swing

我开发了一个应用程序,我想在其中显示带有图像列表的网格。对于每个图像,我创建了一个类myImage的实例。 MyImage类,扩展JCompoment并创建缩略图,并在绘制它之后使用thepaintCompoment(Graphics g)。

一切都很好,但在大尺寸图片中,我有很多延迟来创建缩略图。

现在我想到当我扫描文件夹中的图像时(创建我上面说的列表,创建每个图像的缩略图并将其保存到光盘。对于每个图像,我将有一个数据库记录来保存图像路径和缩略图路径。这是问题的一个很好的解决方案吗?  有没有办法在文件管理器中为每个图像创建系统的缩略图。或者比我尝试的更有效的解决方案。

谢谢!

3 个答案:

答案 0 :(得分:2)

您最好的选择是使用像imagemagick这样的内容来转换图像并创建缩略图。有一个名为JMagick的项目,它为Imagemagick提供了JNI钩子,但也运行了一个过程。

Imagemagick是用于操作图像的高度优化的C代码。它还能够处理Java不会使用的图像,并且内存使用量更少。

我在一个网站上工作,我们让用户上传艺术品并动态创建缩略图,它绝对需要快速,所以这就是我们使用的。

以下是Groovy代码,但它可以很容易地修改为Java代码:

public boolean createThumbnail(InputStream input, OutputStream output){        

    def cmd = "convert -colorspace RGB -auto-orient -thumbnail 125x125 -[0] jpg:-"

    Process p = cmd.execute()
    p.consumeProcessErrorStream(System.out)
    p.consumeProcessOutputStream(output)
    p.out << input
    p.out.close()

    p.waitForOrKill(8000)
    return p.exitValue()==0
}

这会使用管道创建缩略图,而不会将任何数据实际写入磁盘。如果你想立即写它,outputStream可以是一个文件。

答案 1 :(得分:1)

避免操作系统依赖的一种方法是使用getScaledInstance(),如example所示。有关某些限制,请参阅cited articles。如果花费的时间过长,请使用SwingWorker进行加载并在后台进行缩放。

答案 2 :(得分:0)

我没有用它来创建缩略图,但您可能还想看一下ImageIO API。

ImageIO