给mac上的app更换图标

参考

用自动操作(Automator.app)生成的app,其默认图标如下,有时我们需要给它一个别的图标,就得更换app图标。

image-20241026235158485

命令行自制图标

无效方法:超级右键的图片转成图标

我试验了以下,用超级右键的图片转成图标功能所生成icns文件,将app图标替换成此icns后(使用的是下文提到的有效的方法:显示包内容-更换icns),无法变成自制图标,而是会变成

image-20241026234534565

有效方法:用命令行

macOS上app使用图标的文件格式是.icns,将可以用命令把png图片转换成icns图标。

打开终端执行如下命令

png2icon()
{
    local source_image="$1"  # 准备一个png
    # 必需是png格式
    # 最好是正方形,不然生成图标时会拉伸成正方形
    # 分辨率最好为1024*1024,这个图片为macOS系统规范的最大格式,能让后续生成的图标尽可能清晰

    if [ ! -r "$source_image" ]; then
        echo $source_image not found
        return
    elif [ ! "${source_image}" =~ \.png$ ]; then
        echo $source_image is not png
        return
    fi
    cd $(dirname $source_image)

    local filename=$(basename $source_image)
    filename="${filename/.png/}"
    local iconset_dir=$filename.iconset
    mkdir $iconset_dir # 必须以.iconset后缀结尾
    # 生成不同尺寸的Png图片
    sips -z 16 16 $source_image --out $iconset_dir/icon_16x16.png
    sips -z 32 32 $source_image --out $iconset_dir/icon_16x16@2x.png
    sips -z 32 32 $source_image --out $iconset_dir/icon_32x32.png
    sips -z 64 64 $source_image --out $iconset_dir/icon_32x32@2x.png
    sips -z 128 128 $source_image --out $iconset_dir/icon_128x128.png
    sips -z 256 256 $source_image --out $iconset_dir/icon_128x128@2x.png
    sips -z 256 256 $source_image --out $iconset_dir/icon_256x256.png
    sips -z 512 512 $source_image --out $iconset_dir/icon_256x256@2x.png
    sips -z 512 512 $source_image --out $iconset_dir/icon_512x512.png
    sips -z 1024 1024 $source_image --out $iconset_dir/icon_512x512@2x.png

    # 生成icns图片
    iconutil -c icns $iconset_dir -o $filename.icns
}

png2icon <待转换的png文件>

通过预览打开 app.icns 图片,可以查看图片包含了多个尺寸的Png图片

小编制作的icns图标文件的预览

更换app图标

更换为自制图标

无效的方法:在显示简介中粘贴自制icns

下述方法对安装的app和自动操作(Automator.app)生成的app都无效:

在Finder中,选中自制的图标(.icns文件),按ctrl+c;在Finder中选中软件名称.app,右键,点显示简介,点击上图红框处的图标,按ctrl+V。

这样B.app的图标并不会变成自制图标,而是会变成

image-20241026234534565

有效的方法:显示包内容-更换icns

更换包内容中的icns

在Finder中,选中待更换图标的app,右键菜单中,点显示包内容。将软件名.app/Contents/Resources/xxxx.icns改名为xxx-backup.icns(自动操作(Automator.app)生成的app其图标名称为AutomatorApplet.icns,下载的app的图标名称是别的),然后将自己制作的icns复制到软件名.app/Contents/Resources,并更名为AutomatorApplet.icns

注:上述操作可以用终端完成

cd <软件名>.app/Contents/Resources/
mv xxx.icns xxx-backup.icns # 自动操作(Automator.app)生成的app其图标名称为AutomatorApplet.icns,下载的app的图标名称是别的
cp <.icns文件的路径> AutomatorApplet.icns

触发app加载新icns

然后,还需要一番操作触发这个app去加载新的icns,操作如下:

在Finder中,选中待更换图标的app,右键菜单中,点显示简介,然后在Finder中ctrl+c复制任意图片(.png)或图标(.icns)(可以是之前复制进来的自制icns),点击下图红框区域,然后按ctrl+v。

image-20241026234814931

然后,图标会变成了下图的样子。而后点击红框区域,然后按delete键,

image-20241026234534565

图标立即就会变成之前自己制作的icns。

image-20241026234435106

更换为另一个app的图标

在Finder中选中A.app,右键,点显示简介,点击上图红框处的图标,按ctrl+c;

然后,在Finder中选中B.app,右键,点显示简介,点击上图红框处的图标,按ctrl+V。

这样B.app的图标就换成了A.app的图标。

该方法适用于A或B是安装的app和用自动操作(Automator.app)生成的app。