前两天看到了个给Mac应用换icon的教程:快速生成 Mac App icns 图标,不过教程是针对单个png图片转换的。因为懒得找轮子,所以自己写了个批量转换的脚本。

#!/bin/bash

path=$1
#检查是否输入了参数
if [ "$1" == "" ];
then
  echo "请输入png文件所在目录作为参数,取消请按 ctrl+c"
  read path
fi

#校验参数
if [ ! -d $path ];
then
  echo "请将所有png文件放在单独的文件夹目录下,并将文件夹路径作为参数"
  exit
fi

#目标输出文件夹
if [ ! -d "$path/icons" ]
  then $(mkdir $path/icons)
fi

files=$(ls $path)
for filename in ${files[@]}
do
  echo $filename
  #校验格式,忽略非png文件
  if [ ${filename: -4} != '.png' ]
    then continue
  fi

  #TODO: 文件重名问题

  #取文件名去掉空格
  iconname=$(echo $filename | awk -F"[.]" '{print $1}' | grep -o "[^ ]\+\( \+[^ ]\+\)*").iconset
  echo $iconname
  #如果文件夹已经存在,忽略,防止最后清理文件误删
  if [ -d $path/$iconname ]
    then continue
  fi

  #新建单个icon的素材目录
  $(mkdir $path/$iconname)

  #生成各种size的素材
  $(sips -z 16 16     $path/$filename --out $path/$iconname/icon_16x16.png)
  $(sips -z 32 32     $path/$filename --out $path/$iconname/icon_16x16@2x.png)
  $(sips -z 32 32     $path/$filename --out $path/$iconname/icon_32x32.png)
  $(sips -z 64 64     $path/$filename --out $path/$iconname/icon_32x32@2x.png)
  $(sips -z 128 128   $path/$filename --out $path/$iconname/icon_128x128.png)
  $(sips -z 256 256   $path/$filename --out $path/$iconname/icon_128x128@2x.png)
  $(sips -z 256 256   $path/$filename --out $path/$iconname/icon_256x256.png)
  $(sips -z 512 512   $path/$filename --out $path/$iconname/icon_256x256@2x.png)
  $(sips -z 512 512   $path/$filename --out $path/$iconname/icon_512x512.png)
  $(sips -z 1024 1024   $path/$filename --out $path/$iconname/icon_512x512@2x.png)

  #转换成icns
  # echo "iconutil -c icns $path/$iconname -o $path/icons/$iconname.icns"
  $(iconutil -c icns $path/$iconname -o $path/icons/$iconname.icns)

  #清理中间文件
  $(rm -rf $path/$iconname)
done