Applescript 提取Gif文件并将其放入应用程序内容中的文件夹中

Applescript 提取Gif文件并将其放入应用程序内容中的文件夹中,applescript,Applescript,我正在制作的AppleScript从gif文件中提取帧,并将各个图像放在应用程序内容中的文件夹中。然后,它会将桌面背景快速更改为文件夹中的图像,从而为壁纸提供gif。但是,我不知道如何将gif文件提取到应用程序中的文件夹中。这就是我到目前为止所做的: on delay duration set endTime to (current date) + duration repeat while (current date) is less than endTime tell AppleSc

我正在制作的AppleScript从gif文件中提取帧,并将各个图像放在应用程序内容中的文件夹中。然后,它会将桌面背景快速更改为文件夹中的图像,从而为壁纸提供gif。但是,我不知道如何将gif文件提取到应用程序中的文件夹中。这就是我到目前为止所做的:

on delay duration
set endTime to (current date) + duration
repeat while (current date) is less than endTime
    tell AppleScript to delay duration
end repeat
end delay
set gifFiles to choose file of type "com.compuserve.gif" with prompt "Select  GIF"
tell application "System Events" to set gifFileName to name of gifFiles
set dest to quoted form of POSIX path of (path to me) & "Contents:Resources:Gif"

set pScript to quoted form of "from AppKit import NSApplication, NSImage, NSImageCurrentFrame, NSGIFFileType; import sys, os
tName=os.path.basename(sys.argv[1])
dir=sys.argv[2]
app=NSApplication.sharedApplication() 
img=NSImage.alloc().initWithContentsOfFile_(sys.argv[1])
if img:
     gifRep=img.representations()[0]
 frames=gifRep.valueForProperty_('NSImageFrameCount')
 if frames:
     for i in range(frames.intValue()):
         gifRep.setProperty_withValue_(NSImageCurrentFrame, i)
         gifRep.representationUsingType_properties_(NSGIFFileType, None).writeToFile_atomically_(dir + tName + ' ' + str(i + 1).zfill(2) + '.gif', True)
     print (i + 1)"

repeat with f in gifFiles
set numberOfExtractedGIFs to (do shell script "/usr/bin/python -c " & pScript & " " & (quoted form of POSIX path of f) & " " & dest) as integer
end repeat
repeat
try
    set desktop_image to (path to me as string) & "Contents:Resources:Gif:" & gifFileName & " 01.gif"
    tell application "Finder" to set the desktop picture to desktop_image
end try
delay 0.05
try
    set desktop_image to (path to me as string) & "Contents:Resources:Gif:" & gifFileName & " 02.gif"
    tell application "Finder" to set the desktop picture to desktop_image
end try
delay 0.05
try
    set desktop_image to (path to me as string) & "Contents:Resources:Gif:" & gifFileName & " 03.gif"
    tell application "Finder" to set the desktop picture to desktop_image
end try
delay 0.05
try
    set desktop_image to (path to me as string) & "Contents:Resources:Gif:" & gifFileName & " 04.gif"
    tell application "Finder" to set the desktop picture to desktop_image
end try
delay 0.05
try
    set desktop_image to (path to me as string) & "Contents:Resources:Gif:" & gifFileName & " 05.gif"
    tell application "Finder" to set the desktop picture to desktop_image
end try
end repeat

脚本中存在一些问题

  • 选择文件
    返回单个文件。重复循环
    在gifFiles
    中用f重复会中断脚本
  • 目标文件夹的正确POSIX路径为
    将dest设置为引用形式(POSIX路径of(path to me)和“Contents/Resources/Gif”)
  • 组成文件路径时必须添加斜杠
尝试此操作,脚本假定
Resources
文件夹中的
Gif
文件夹存在

set gifFile to choose file of type "com.compuserve.gif" with prompt "Select  GIF"
tell application "System Events" to set gifFileName to name of gifFile
set dest to quoted form of (POSIX path of (path to me) & "Contents/Resources/Gif")

set pScript to quoted form of "from AppKit import NSApplication, NSImage, NSImageCurrentFrame, NSGIFFileType; import sys, os
tName=os.path.basename(sys.argv[1])
dir=sys.argv[2]
app=NSApplication.sharedApplication() 
img=NSImage.alloc().initWithContentsOfFile_(sys.argv[1])
if img:
 gifRep=img.representations()[0]
 frames=gifRep.valueForProperty_('NSImageFrameCount')
 if frames:
  for i in range(frames.intValue()):
   gifRep.setProperty_withValue_(NSImageCurrentFrame, i)
   gifRep.representationUsingType_properties_(NSGIFFileType, None).writeToFile_atomically_(dir + '/' + tName + ' ' + str(i + 1).zfill(2) + '.gif', True)
  print (i + 1)"


do shell script "/usr/bin/python -c " & pScript & " " & (quoted form of POSIX path of gifFile) & " " & dest
tell application "Finder"
    set extractedGiFFiles to files of folder ((path to me as text) & "Contents:Resources:Gif:")
    repeat
        repeat with aFile in extractedGiFFiles
            set the desktop picture to aFile
            delay 0.05
        end repeat
    end repeat
end tell