如何在Mac上为文件类型设置图标?


42

整个系统如何为某些文件类型设置图标?

例如,我有一个以.scala扩展名结尾的文本文件,并且我想为整个系统以及该扩展名的任何新创建的文件关联一个图标。

谢谢。


刚刚注意到您是MAC ...但是无论如何,在Windows上,您将更改与该文件类型关联的默认应用程序。然后,该文件带有该应用程序的图标。
怀特先生

12
@ w3d:他不在Mac上,在Mac上。
Wuffers 2010年

Answers:


41

文件类型的图标由Launch Services处理(该服务尤其确定哪个应用程序处理文件类型)。文件图标始终由默认情况下打开文件的应用程序处理提供。这样,例如“预览”默认提供PDF图标和PNG图标,但是如果您改为使用Pixelmator打开所有PNG文件,则这些文件随后将获得Pixelmator样式的图标。

您需要做的是将文件类型定义添加到默认情况下打开它的应用程序中,或者为文件类型创建自己的“虚拟”应用程序


举例来说,我的系统尚不了解.scala,因此我想对其TextMate进行处理。

首先,我显示包内容TextMate.app,导航到Contents/开放的Info.plist,无论是用文本编辑器,或者Property List Editor,苹果的开发者工具的一部分。

TextMate使用一种不寻常的格式Info.plist(通常是二进制或XML),其摘录如下:

CFBundleDocumentTypes = (
    {   CFBundleTypeName = "ADA source";
        CFBundleTypeExtensions = (adb, ads); 
        CFBundleTypeIconFile = ADA; 
    },

父键CFBundleDocumentTypes是我们想要的。它的第一个子元素用大括号括起来,包含文件类型定义,并带有名称(对于Finder中的文件类型列),文件扩展名和图标文件的名称(ADAfor TextMate.app/Contents/Resources/ADA.icns)。

为了支持.scala,我们需要在同一个父元素下添加一个与上述元素类似的兄弟元素CFBundleDocumentTypes

CFBundleDocumentTypes = (
    {   CFBundleTypeName = "ADA source";
        CFBundleTypeExtensions = (adb, ads); 
        CFBundleTypeIconFile = ADA; 
    },
    {   CFBundleTypeName = "Scala source";
        CFBundleTypeExtensions = (scala); 
        CFBundleTypeIconFile = ADA; 
    },

为简单起见,我使用的是相同的图标文件,但我们可以自己创建一个,然后将其复制TextMate.app/Contents/Resources/SCALA.icns并引用到SCALAInfo.plist

现在,如果正在运行,请关闭TextMate,将应用程序移动TextMate.app到另一个文件夹,然后再次打开它。关闭它,然后将其移回,然后再次将其打开。这样做是为了启动服务可以选择Info.plist我们刚刚执行的更改。

结果如下所示(请记住,我们为重复使用了TextMate Ada图标.scala):

替代文字

如果您不想将应用程序与打开.scala文件相关联(无法想象为什么,但是有一种方法可以这样做):将文件的添加项更改为以下内容:

    {   CFBundleTypeName = "Scala source";
        CFBundleTypeExtensions = (scala); 
        CFBundleTypeIconFile = ADA; 
        CFBundleTypeRole = "None";
    },

现在,该应用程序声明了文件类型,但告诉系统它不知道如何处理该文件(Apple提供了Finder声明字体类型的示例,尽管它无法自行打开它们)。

*请注意,对文件类型的任何永久性应用程序分配都将覆盖图标,可能是“未知文档”类型。


如果您已经具有与关联的应用程序.scala,并且只想更改文件图标而不更改关联的应用程序:

打开应用程序Info.plist,在中查找文件类型条目CFBundleDocumentTypes,然后获取CFBundleTypeIconFile。修改该文件,.../Contents/Resources/此后不久应在Finder中反映出来。


奖金信息:

如何将单个文档或文件夹的图标更改为图像文件

假设您有一个~/Desktop/test.png要使用图标的图像(这是上面的屏幕快照,用于说明.scala/ TextMate / Ada图标的更改。

打开/Applications/Utilities/Terminal.app并输入:

sips -i ~/Desktop/test.png

这会将test.png文件图标更改为其图像。由于我喜欢递归,因此请尝试以下操作:

之前,是普通的预览png图标(已禁用图像预览):

替代文字

之后,图像文件本身就是其预览:

替代文字

现在,我们可以打开文件的“ 获取信息”对话框,单击左上角的所需的将来的文档图标,Cmd-C进行复制,打开文档文件的“ 获取信息”对话框,单击左上角的不需要的当前文档图标,然后Cmd-V粘贴我们想要的图标。


或者,您可以在“预览”中打开要用作图标的图像文件,Cmd-A选择全部,然后Cmd-C将图像复制到剪贴板。然后打开目标文档的“ 获取信息”对话框,选择要在左上角更改的图标,然后Cmd-V将图像粘贴到其上。


2
要验证的一件事:这会使应用程序的数字签名无效吗?codesign --verify --verbose /Applications/TextMate.app或类似的东西。如果无效,则不要对需要防火墙中有异常或需要钥匙串的应用程序执行此操作。我不确定弄乱签名还会导致其他问题。(详细信息+1!)
Arjan 2010年

1
编辑 BAH,我是第一次略读,但没有看到用于强制LS更新的替代方法。嗯,FWIW:更改应用程序(或任何捆绑软件/软件包)的Info.plist之后,只有一件事:您可能需要touch捆绑软件的根目录来更新其修改日期。然后在Finder中,取消选择并重新选择应用程序/捆绑包/程序包,当它发现修改日期晚于Launch Services数据库中缓存的信息的修改日期时,它将重新注册它,从而识别出所有更改你做了。
NSGod 2010年

1
@Arjan那里有一个要点。不幸的是,TextMate.app: code object is not signed我不想再经历一次。我怀疑这是一个真正的问题,但我没有想到。编辑:再三考虑,自定义键盘快捷键也存储在中Info.plist。因此,如果不是那样的话,这实际上可能不是问题。唯一的问题可能是在应用程序捆绑包中添加了其他图标文件。
丹尼尔·贝克

1
我使用了完全相同的方法(尽管在Sublime Text的xml Info.plist中进行了更改)。结果,文件关联起作用了,但这并没有更改关联文件的图标。知道为什么这行不通吗?
gfrigon 2015年

2
晚会晚了一点,但我必须同意@Arjan。如果您有使用代码签名的应用程序,例如,哦,我不知道,... Xcode ...它实际上会告诉您该应用程序已损坏,请删除该应用程序,然后从App Store重新下载。我真正不喜欢的是像Enthought Canopy这样的应用如何劫持所有扩展图标。Apple确实应该做到这一点,即当您为系统使用的文件类型设置默认编辑器时,会对应用程序关联等所有必要的更改。
AMR

1

您需要在程序中替换ICNS文件,该程序被分配为特定文件类型的默认程序。

1-为所需的图标创建图像,然后另存为png文件类型(png支持透明度)。

2-将png文件转换为icns文件类型(FastIcns非常棒,它是免费的)。

3-CMD单击或右键单击设置为特定文件类型的默认应用程序的应用程序,然后选择“显示包内容”。

4-寻找应用程序指定为特定文件类型图标的icns文件,它可能位于名为Resources的文件夹中。

5-为您创建的icns文件命名,与您要替换的文件名称完全相同。

6-将创建的新icns文件复制并粘贴或拖放到要替换的icns文件所在的文件夹中,并在提供选项后选择“替换”。

7-完成!该文件类型的所有图标均已替换为所需的新图标。


这个答案与哪个版本的OSX有关……只​​是在方法不可避免地更改时为其打上时间戳。
2012年

0

我经常这样做的方法是找到带有该扩展名的文件,右键单击»获取信息,或Command-i,这将拉起信息面板。在顶部,您可以看到当前用于图像的图标。您可以将图像文件拖到该文件上进行更改,或者如果您复制了该图像,则可以单击要更改的图像并粘贴以进行更改。


另请参阅如何在Mac OS X中更改应用程序图标上的图像,请注意,您可以在“预览”中打开的任何图像都可以用作图标,方法是在“预览”中打开它,然后选择它并使用Command-C复制它。这会将图像放置在剪贴板上,该图像也包含用作图标的格式。然后选择现有图标,然后使用Command-V粘贴剪贴板。
Arjan 2010年

3
这行不通。当我将.PNG文件拖到信息屏幕上的图像时,我得到的是PNG图标,而不是PNG中的图像。并且它更改整个系统中的特定文件,而不是所有具有相同扩展名的文件。
伊兰·坎普夫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.