logeable

Mac 制作 .icns 图标文件

在 macOS 系统中,应用程序图标通常使用 .icns 格式,它包含了多种分辨率的图标,用于在不同场景(如 Dock、Finder、应用切换器)中呈现清晰的图标效果。

准备工作

  1. 原始图标文件

首先你需要准备一张高分辨率的图标图像,推荐使用 1024x1024 像素 的 PNG 图片,命名为:icon.png。 这张图将被缩放为多个尺寸,用于适配不同的显示环境。

  1. 创建 icon.iconset 目录

按照 iconutil 的要求,将多尺寸的图标文件放在一个名为 .iconset 后缀得的文件夹中,这里我们创建一个 icon.iconset 目录。

Terminal window
mkdir icon.iconset

生成多尺寸图标

  1. icns 文件支持以下图标尺寸:
文件名尺寸用途
icon_16x16.png16×16Finder列表小图标等
icon_16x16@2x.png32×32Retina 显示下的小图标
icon_32x32.png32×32Finder图标
icon_32x32@2x.png64×64Retina 显示下
icon_128x128.png128×128快速预览图标
icon_128x128@2x.png256×256Retina 显示下
icon_256x256.png256×256Launchpad 图标
icon_256x256@2x.png512×512Retina 显示下
icon_512x512.png512×512Launchpad 大图标
icon_512x512@2x.png1024×1024Retina 显示下的大图标
  1. 使用 sips 工具

sips 是 macOS 自带的图片处理工具,我们用它来创建不同尺寸的图像:

Terminal window
sips -z 16 16 icon.png --out icon.iconset/icon_16x16.png
sips -z 32 32 icon.png --out icon.iconset/icon_16x16@2x.png
sips -z 32 32 icon.png --out icon.iconset/icon_32x32.png
sips -z 64 64 icon.png --out icon.iconset/icon_32x32@2x.png
sips -z 128 128 icon.png --out icon.iconset/icon_128x128.png
sips -z 256 256 icon.png --out icon.iconset/icon_128x128@2x.png
sips -z 256 256 icon.png --out icon.iconset/icon_256x256.png
sips -z 512 512 icon.png --out icon.iconset/icon_256x256@2x.png
sips -z 512 512 icon.png --out icon.iconset/icon_512x512.png
cp icon.png icon.iconset/icon_512x512@2x.png

打包为 .icns 文件

现在我们已经得到了完整的 icon.iconset 目录,接下来使用 iconutil 打包:

Terminal window
iconutil -c icns icon.iconset

执行后,得到一个名为 icon.icns 的文件。

完整脚本

#!/bin/bash
# 用法说明
if [ $# -ne 1 ]; then
echo "用法: $0 icon.png"
exit 1
fi
ICON_SRC="$1"
# 检查文件是否存在
if [ ! -f "$ICON_SRC" ]; then
echo "错误: 文件 $ICON_SRC 不存在"
exit 1
fi
ICON_NAME="icon"
ICONSET="${ICON_NAME}.iconset"
ICNS_FILE="${ICON_NAME}.icns"
# 创建 icon.iconset 目录
mkdir -p "$ICONSET"
# 生成多尺寸图标
echo "正在生成多尺寸图标..."
sips -z 16 16 "$ICON_SRC" --out "$ICONSET/icon_16x16.png"
sips -z 32 32 "$ICON_SRC" --out "$ICONSET/icon_16x16@2x.png"
sips -z 32 32 "$ICON_SRC" --out "$ICONSET/icon_32x32.png"
sips -z 64 64 "$ICON_SRC" --out "$ICONSET/icon_32x32@2x.png"
sips -z 128 128 "$ICON_SRC" --out "$ICONSET/icon_128x128.png"
sips -z 256 256 "$ICON_SRC" --out "$ICONSET/icon_128x128@2x.png"
sips -z 256 256 "$ICON_SRC" --out "$ICONSET/icon_256x256.png"
sips -z 512 512 "$ICON_SRC" --out "$ICONSET/icon_256x256@2x.png"
sips -z 512 512 "$ICON_SRC" --out "$ICONSET/icon_512x512.png"
cp "$ICON_SRC" "$ICONSET/icon_512x512@2x.png"
# 打包为 .icns 文件
echo "正在打包为 $ICNS_FILE..."
iconutil -c icns "$ICONSET" -o "$ICNS_FILE"
# 检查是否成功
if [ $? -eq 0 ]; then
echo "已成功生成 $ICNS_FILE"
else
echo "打包失败"
fi

将脚本保存为 make_icns.sh 后使用:

Terminal window
chmod +x make_icns.sh
./make_icns.sh icon.png