如何获取特定文件的图标或缩略图

1 投票
4 回答
5297 浏览
提问于 2025-04-17 12:37

我在寻找一种方法,可以获取与某种文件类型相关的图标,适用于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))

谢谢大家!

撰写回答