我正在尝试使用Applescript或终端(或使用do shell脚本命令通过applescript终端)自动从选定的.gif文件中提取帧。我知道如何使用Preview.app进行单击和拖动方法,但有没有办法自动执行此操作?
谢谢! 埃里克
答案 0 :(得分:12)
ImageMagick为您提供了一个cmdlet,可以提取动画gif的帧。
这将提取文件“animated.gif”的前10帧
# convert 'animated.gif[0-10]' frames%03d.png
答案 1 :(得分:8)
对于有兴趣使用原生预览应用程序导出单帧的人...
http://www.macobserver.com/tmo/article/preview-extracting-frames-from-animated-gifs
答案 2 :(得分:3)
您可以使用 AppKit 框架从GIF中提取帧。
这是AppleScript(在Mavericks上测试):
set gifFiles to choose file of type "com.compuserve.gif" with prompt "Select GIF's files" with multiple selections allowed
set dest to quoted form of POSIX path of (choose folder with prompt "Select the folder to save gif's frames")
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
此脚本显示两个对话框窗口,一个用于选择GIF文件的对话框,一个用于选择目标文件夹的对话框。