这是另一种方法... 注意:在创建 icns 文件之前,您的原始 png 将被缩放到预期的大小。如果要保留原始 png 的副本,请先复制它。您还可以在脚本中添加一行左右以自动执行此操作。
property expectedSizes : {16, 32, 48, 128, 256, 512, 1024, 9999999}
set myFiles to choose file with multiple selections allowed
repeat with aFile in myFiles
tell application "System Events" to set bPath to POSIX path of (container of aFile)
set newPath to bPath & "/" & bName(aFile) & ".icns" as text
set aFile to quoted form of (POSIX path of aFile)
set {W, H} to {paragraph 1, paragraph 2} of (do shell script "sips -g pixelWidth -g pixelHeight " & aFile & " | grep -Eo [0-9]*$")
set {W, H} to {W as number, H as number}
if W > H then
set W to eSize(W)
do shell script "sips " & aFile & " -Z " & W & " -p " & W & space & W & " --padColor FFFFFF -i"
delay 1
else if H > W then
set H to eSize(H)
do shell script "sips " & aFile & " -Z " & H & " -p " & H & space & H & " --padColor FFFFFF -i"
delay 1
-- H = W but not in expected sizes
else if H is not in expectedSizes then
set H to eSize(H)
do shell script "sips " & aFile & " -Z " & H & " -p " & H & space & H & " --padColor FFFFFF -i"
delay 1
end if
do shell script "sips -s format icns " & aFile & " --out " & quoted form of newPath
end repeat
on bName(theFile)
tell application "Finder" to set {name:fileName, name extension:nameExtension} to theFile
set baseName to text 1 thru ((get offset of "." & nameExtension in fileName) - 1) of fileName
end bName
on eSize(lDimen)
repeat with i from 1 to 8
if lDimen < item i of expectedSizes then return item (i - 1) of expectedSizes
end repeat
end eSize