2

我使用 OS X Mountain 10.8.2。

我使用 Automator 并添加了 AppleScript,从Iconoodle 的旧应用程序开发人员那里复制命令 - 方便的 ICNS 到 PNG 图像转换(OS X 10.8 作为 PPC 应用程序不支持 Iconoodle)。我将工作流程保存为应用程序。我选择了图像并将它们放入应用程序,但图像没有转换为 ICNS。我还从问题Convert image to .icns file AppleScript Obj-C 中复制了它,它也没有工作。

我真的很沮丧。我想使用 Automator 将多个图像从 PNG 转换为 ICNS 一次。在图标编辑器应用程序中将每个图像转换为 ICNS 非常烦人,一对一。Preview.app 不想将 PNG 格式的图像转换为 ICNS,因为它只有一页,只有当图标有很多页时,它才能将其转换为 ICNS。

你知道做吗?

感谢您的关注、帮助和耐心!

4

2 回答 2

0

您仍然可以通过将 iconoodle 脚本粘贴到 AppleScript Editor 来运行它。它只是 sips 的包装器,但它只能将 icns 转换为 png。

您可以直接使用 sips 将 png 转换为 icns:

for f in *.png; do sips -s format icns "$f" --out "${f%png}icns"; done
于 2012-11-26T10:27:13.510 回答
0

这是另一种方法... 注意:在创建 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
于 2012-11-26T15:11:58.970 回答