提取Gif文件并将其放入应用内容

时间:2015-11-15 09:44:54

标签: applescript

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

1 个答案:

答案 0 :(得分:0)

脚本中存在一些问题。

  • choose file返回单个文件。重复循环repeat with f in gifFiles打破了脚本。
  • 到目标文件夹的正确POSIX路径是
    set dest to quoted form of (POSIX path of (path to me) & "Contents/Resources/Gif")
  • 撰写文件路径时必须添加斜杠

试试这个,该脚本假定Gif文件夹中的文件夹Resources存在。

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