2014-11-24 124 views
1

我想获得不同文件的缩略图。它可以是图像或音乐或.docx文档。我做了一个代码,它给了我一个非常小的文件类型的图像,而不是实际的文件内容。例如,所有图像都有相同的图标。但在Windows中,它将图像显示为缩略图或PDF文件第一页的图片。如何获取不同文件的缩略图图像?

这是我的工作代码,显示每种格式的一般图标的32 x 32图像。

File file = new File("D:/Desktop/image.jpg"); 
Icon ico = FileSystemView.getFileSystemView().getSystemIcon(file); 
JLabel image = new JLabel(); 
image.setIcon(ico); 
panel.add(image); 

enter image description here

任何想法如何获得每个文件,而不是一般的人更大的指定图标?

谢谢

+0

这不是“Windows”功能,它是Windows Exporer功能。打开任何应用程序(如Eclipse或Word),然后打开文件浏览器。你会发现所有的图标都是你从FileSystemView获得的 – ControlAltDel 2014-11-24 20:37:40

+0

Off-top:由于你已经用'java'标记了你的问题,所以你不需要在标题中重复这个问题。 – Pshemo 2014-11-24 20:38:07

+0

@ControlAltDel感谢您的评论。有什么办法可以在软件中做到这一点?我不知道它会处理什么样的文件,但它应该跟Windows Exproper一样? – Dan 2014-11-24 22:46:21

回答

0

对于需要进行以下操作的图像。

ImageIcon icn = new ImageIcon(new File("D:/Desktop/image.jpg")); 
Image resized = icon.getImage().getScaledInstance(width, height, Image.SCALE_SMOOTH); 
label.setIcon(new ImageIcon(resized)); 

一些库(IcePDF例如)也可以转换成PDF文件的网页,以图像,因此您可以使用相同的方法。

+0

谢谢,我正在使用的软件是一个通用的文件浏览器,所以我不知道该软件将处理什么格式。我正在寻找一个通用的方法。就像Windows资源管理器那样 – Dan 2014-11-24 22:40:28

+1

@Dan我认为资源管理器使用本地Windows API,在没有本机C/C++代码的情况下,java不能访问。 – 2014-11-25 07:57:48

0

您可以按照Windows资源管理器所做的唯一方法是使用文件类型/内容解析器。 除非Windows没有PDF/word /图像浏览器/处理器,否则它不能生成包含(例如)PDF文件第一页的缩略图图像。它只是常用的处理器与Windows捆绑在一起。

回到你有缩略图的问题,你可以做的是提取正在探索的文件的扩展名,并保存(该类型的)图像,它将显示为缩略图(但不是实际内容)。虽然,图像可以像上面的答案中所建议的那样轻松地“缩略图”。所以,你可以使用它。对于未知的文件类型,您可以使用一些通用图标。

我不认为,一个浏览器“读取”PDF/Word /图像等所有在一个将只是一个资源管理器的应用程序。