2010-11-15 64 views
2

我开发了一个应用程序,我想用一系列图像显示网格。对于每个图像,我创建一个类myImage的实例。 MyImage类扩展了JCompoment并创建了一个缩略图,并在绘制之后用paintCompoment(Graphics g)绘制。Java2d缩略图。我可以从操作系统获得缩略图吗?

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

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

谢谢!!

+0

你在说哪个系统?在Gnome中,它似乎存储在'〜/ .thumbnails/normal /'md5sum $ file'.png'中(虽然'md5sum'只是一个简单的猜测:) – Kevin 2010-11-15 17:43:03

+0

谢谢Kevin for you的回答!是的,现在我在gnome中开发,但我想部署应用程序和Windows。是的,我在该目录中找到了许多缩略图。如果您知道目录中包含我的电脑上的所有媒体文件的缩略图,或者我至少应该放一次,请使用nautilus打开图像文件,以创建缩略图。还有一个文件夹在Windows(XP,Vista,7),所以根据OS Linux系统与GNOME或Windows来创建我的应用程序的2个单独的实例或从适当的文件夹中获取缩略图。再次感谢。 – javment 2010-11-15 20:13:32

回答

2

最好的办法是使用类似imagemagick的东西来转换图像并创建缩略图。有一个项目叫JMagick,它提供了Imag的JNI钩子emagick,但也运行一个流程工作。

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可以是一个文件。

+0

注意:如果您计划发布到Windows,则需要使用JMagick而不是控制台应用程序。它也应该更快。 – 2010-11-15 20:16:09

+0

+1有趣的想法;你能否评论依赖性负担? – trashgod 2010-11-15 21:30:24

+0

谢谢,是的,我会尝试使用JMagic,并检查缩略图创建时的延迟是否比我的Java代码少。 – javment 2010-11-15 22:23:40

1

避免OS依赖的一种方法是使用getScaledInstance(),如此example所示。有关某些限制,请参阅cited articles。如果时间过长,请使用SwingWorker在后台执行加载和缩放。

+0

谢谢。我更改我的代码以创建拇指,使用getScaledInstance(),但在加载一些照片后,出现内存错误。我将学习SwingWorker。在下面的答案中,您对“+1有趣的想法有什么意义;您可以评论依赖性负担吗?” – javment 2010-11-15 22:28:14

+0

内存错误表明您可能无意中保留了对象。依赖性负担是维护和部署每个目标OS的第三方应用程序所需的努力。 – trashgod 2010-11-16 02:32:18

0

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

ImageIO

+0

谢谢,这已经是我用来创建缩略图了。我会尝试米兰Ramaiya的建议jMagick,试图缩短缩略图的创建时间。 – javment 2010-11-27 08:37:12