如何获取特定文件的图标或缩略图
我在寻找一种方法,可以获取与某种文件类型相关的图标,适用于Linux系统。
我希望使用一个shell脚本或者Python来实现。
我更倾向于使用一个原生的Python方法,这样在所有平台上都能使用,不过如果是shell脚本的方法也可以。
4 个回答
2
我觉得不同平台的图标文件并不一样……
在Mac电脑上,图标是存放在应用程序包里的,比如:
/Applications/Mail.app/Contents/Resources/app.icns
而在Linux系统上,它们似乎也在一个类似但不同的地方,比如:
/usr/lib/firefox/icons/mozicon16.xpm
所以,我觉得你可能很难找到一个简单的跨平台解决方案,你需要自己写代码,去每个操作系统的合适位置查找图标。
3
感谢 @Ali_AlNoaimi 提供的解决方案。我把它改成了可以在 python3 和 PyGI 中使用:
import os , gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gio , Gtk
def get_thumbnail(filename,size):
final_filename = ""
if os.path.exists(filename):
file = Gio.File.new_for_path(filename)
info = file.query_info('standard::icon' , 0 , Gio.Cancellable())
icon = info.get_icon().get_names()[0]
icon_theme = Gtk.IconTheme.get_default()
icon_file = icon_theme.lookup_icon(icon , size , 0)
if icon_file != None:
final_filename = icon_file.get_filename()
return final_filename
print(get_thumbnail("/path/to/file",32))
5
我找到了解决办法,并写了一个函数来完成这个任务。
#!/usr/bin/env python
import gio, gtk, os
def get_icon_filename(filename,size):
#final_filename = "default_icon.png"
final_filename = ""
if os.path.isfile(filename):
# Get the icon name
file = gio.File(filename)
file_info = file.query_info('standard::icon')
file_icon = file_info.get_icon().get_names()[0]
# Get the icon file path
icon_theme = gtk.icon_theme_get_default()
icon_filename = icon_theme.lookup_icon(file_icon, size, 0)
if icon_filename != None:
final_filename = icon_filename.get_filename()
return final_filename
print (get_icon_filename("/home/el7r/Music/test.mp3",64))
谢谢大家!