利用applescript提取程序图标

代码如下


-- Ask the user to select an app
set theApp to choose file of type "app" default location (path to applications folder)

-- Get the app name
tell application "System Events"
    set theAppName to name of theApp
    if theAppName ends with ".app" then set theAppName to text 1 thru -5 of theAppName
    
    -- Determine whether the app is a package, and notify the user if it's not
    set isPackage to (package folder of theApp)
    
    -- Notify the user if the app is not a package
    if isPackage = false then
        alert("Icons cannot be extracted from " & theAppName & " because it is not a package.") of me
        return
    end if
    
    -- Locate the app resources folder
    set theAppResourcesFolder to (path of theApp) & "Contents:Resources:" as string
    
    -- Notify the user if the app resources folder can't be found
    if (folder theAppResourcesFolder exists) = false then
        alert("Icons cannot be extracted from " & theAppName & " because it does not appear to contain a Resources folder.") of me
        return
    end if
    
    -- Retrieve a list of icon files
    set theIconNames to name of every file of folder theAppResourcesFolder where its name extension = "icns"
end tell

-- Notify the user if no icon files were found
if theIconNames = {} then
    alert("No icon files were found in the Resources folder of " & theAppName & ".") of me
    return
end if

-- Ask the user to choose the icons to copy
if length of theIconNames = 1 then
    set theIconsToExtract to theIconNames
else
    set theIconsToExtract to (choose from list theIconNames with prompt "Which icons would you like to extract from " & theAppName & "?" default items theIconNames with multiple selections allowed)
end if
if theIconsToExtract = false then return

-- Ask whether the user would like icon files or PNG files
set theIconType to button returned of (display alert "Extract Icon Files" message "Would you like to extract icons in INCS or PNG format?" buttons {"Cancel", "PNG", "ICNS"} cancel button "Cancel")

-- If a PNG file is preferred, ask the user what size they would like
if theIconType = "PNG" then
    set theSizes to {"16", "32", "128", "256", "Actual Size"}
    set theSizeChoice to (choose from list theSizes with prompt "What size would you like for the PNG icons?" default items {"Actual Size"})
    if theSizeChoice = false then return
    set theSizeChoice to item 1 of theSizeChoice
end if

-- Create an output folder for the icons
set theOutputFolder to makeFolder("Extracted Icons", path to desktop folder as string)
set theOutputFolder to makeFolder(theAppName & " Icons", theOutputFolder)

-- Extract the icons to the output folder
repeat with a from 1 to length of theIconsToExtract
    set theCurrentIconFileName to item a of theIconsToExtract
    set theCurrentIconFile to theAppResourcesFolder & theCurrentIconFileName as string
    
    -- If an icon file is preferred, copy it to the output folder
    if theIconType = "ICNS" then
        tell application "Finder"
            duplicate theCurrentIconFile to theOutputFolder
        end tell
        
        -- If a PNG is preferred, convert the icon to PNG, scale it if necessary, and save it to the output folder
    else
        set theCurrentIconFileNamePrefix to theCurrentIconFileName
        if theCurrentIconFileNamePrefix ends with ".icns" then set theCurrentIconFileNamePrefix to text 1 thru -6 of theCurrentIconFileNamePrefix
        set theSavePath to (theOutputFolder as string) & theCurrentIconFileNamePrefix & ".png"
        tell application "Image Events"
            set theImage to open theCurrentIconFile
            tell theImage
                if theSizeChoice is not equal to "Actual Size" then scale to size theSizeChoice as string
                save as PNG in theSavePath
            end tell
        end tell
    end if
end repeat

-- Let the user know the icons have been extracted and display the output folder
display alert "The specified icons have been extracted."
tell application "Finder" to open theOutputFolder

-- This handler displays an alert
on alert(theMessage)
    display alert "Unable to Extract Icons" message theMessage as warning
end alert

-- This handler makes a folder in an output folder
on makeFolder(theFolderName, theOutputFolder)
    tell application "System Events"
        if (folder theFolderName of folder theOutputFolder exists) then
            return path of (folder theFolderName of folder theOutputFolder)
        else
            return path of (make new folder at folder theOutputFolder with properties {name:theFolderName})
        end if
    end tell
end makeFolder

参考
http://www.tuicool.com/articles/RZzmyu

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容