Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java2d缩略图。我可以从操作系统获取缩略图吗_Java_Image_Swing - Fatal编程技术网

Java2d缩略图。我可以从操作系统获取缩略图吗

Java2d缩略图。我可以从操作系统获取缩略图吗,java,image,swing,Java,Image,Swing,我开发了一个应用程序,我想在其中显示一个带有图像列表的网格。对于每个图像,我创建一个myImage类的实例。MyImage类,扩展JCompoment并创建缩略图,然后在绘图组件(图g)上方绘制缩略图 一切都很好,但在大尺寸的图像中,我有很多延迟来创建缩略图 现在我想,当我扫描文件夹中的图像时(创建我上面提到的列表,创建每个图像的缩略图并将其保存到光盘中)。对于每个图像,我将有一个数据库记录来保存图像路径和缩略图路径。这是一个很好的解决问题的方法吗? 是否有办法在文件管理器中获取系统为每个图像创

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

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

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


谢谢!!

您最好的选择是使用imagemagick之类的工具来转换图像并创建缩略图。有一个名为的项目,它提供了到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
}
public boolean create缩略图(InputStream输入,OutputStream输出){
def cmd=“convert-colorspace RGB-自动定向-缩略图125x125-[0]jpg:-”
进程p=cmd.execute()
p、 ConsumerProcessErrorStream(System.out)
p、 ConsumerProcessOutputStream(输出)

p、 out避免操作系统依赖性的一种方法是使用,如图所示。有关某些限制,请参阅。如果时间太长,请使用a在后台进行加载和缩放。

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


你在谈论哪个系统?在Gnome中,它似乎存储在
~/.thumbnails/normal/
md5sum$文件
.png
(尽管
md5sum
只是一个简单的猜测:)谢谢Kevin的回答!是的,我现在用gnome开发,但我想部署应用程序和windows。是的,我在那个目录中找到了很多缩略图。如果你知道目录包含我电脑中所有媒体文件的缩略图,或者我应该至少打开一次,用nautilus打开图像文件,使缩略图为c已创建。windows(xp、vista、7)中是否有某个文件夹因此,依赖于使用gnome或windows的操作系统Linux系统来创建我的应用程序的两个独立实例,或者从相应的文件夹中获取缩略图。再次感谢。注意:如果您计划发布到windows,您需要使用JMagick而不是控制台应用程序。它应该也会更快。+1有趣的想法;您能对该应用程序发表评论吗是吗?谢谢你,是的,我会尝试使用JMagic,并检查我在缩略图创建上的延迟是否会比我的Java代码少。好吧,对于服务器应用程序,使用命令行工具可以很好地工作,因为你可以完全控制环境。对于Windows,这仍然是可能的,但它太草率了,所以jmagik更好。谢谢。我更改了我的代码e来创建拇指,使用getScaledInstance()但是在加载一些照片后,我得到了一个内存错误。我将研究SwingWorker。在下面的回答中,你对“+1有趣的想法是什么意思;你能评论一下依赖性负担吗?”内存错误表明您可能无意中保留了对象。依赖性负担是维护和部署每个目标操作系统的第三方应用程序所需的工作量。谢谢,这已经是我用来创建缩略图的方法。我将尝试Milan Ramiya的建议jMagick,以减少缩略图的创建时间。