mirror of
https://github.com/python-pillow/Pillow.git
synced 2024-12-25 17:36:18 +03:00
108 lines
2.4 KiB
Python
108 lines
2.4 KiB
Python
#
|
|
# The Python Imaging Library
|
|
# $Id$
|
|
#
|
|
# split an animation into a number of frame files
|
|
#
|
|
|
|
from PIL import Image
|
|
import os, string, sys
|
|
|
|
class Interval:
|
|
|
|
def __init__(self, interval = "0"):
|
|
|
|
self.setinterval(interval)
|
|
|
|
def setinterval(self, interval):
|
|
|
|
self.hilo = []
|
|
|
|
for s in string.split(interval, ","):
|
|
if not string.strip(s):
|
|
continue
|
|
try:
|
|
v = string.atoi(s)
|
|
if v < 0:
|
|
lo, hi = 0, -v
|
|
else:
|
|
lo = hi = v
|
|
except ValueError:
|
|
i = string.find(s, "-")
|
|
lo, hi = string.atoi(s[:i]), string.atoi(s[i+1:])
|
|
|
|
self.hilo.append((hi, lo))
|
|
|
|
if not self.hilo:
|
|
self.hilo = [(sys.maxint, 0)]
|
|
|
|
def __getitem__(self, index):
|
|
|
|
for hi, lo in self.hilo:
|
|
if hi >= index >= lo:
|
|
return 1
|
|
return 0
|
|
|
|
# --------------------------------------------------------------------
|
|
# main program
|
|
|
|
html = 0
|
|
|
|
if sys.argv[1:2] == ["-h"]:
|
|
html = 1
|
|
del sys.argv[1]
|
|
|
|
if not sys.argv[2:]:
|
|
print
|
|
print "Syntax: python explode.py infile template [range]"
|
|
print
|
|
print "The template argument is used to construct the names of the"
|
|
print "individual frame files. The frames are numbered file001.ext,"
|
|
print "file002.ext, etc. You can insert %d to control the placement"
|
|
print "and syntax of the frame number."
|
|
print
|
|
print "The optional range argument specifies which frames to extract."
|
|
print "You can give one or more ranges like 1-10, 5, -15 etc. If"
|
|
print "omitted, all frames are extracted."
|
|
sys.exit(1)
|
|
|
|
infile = sys.argv[1]
|
|
outfile = sys.argv[2]
|
|
|
|
frames = Interval(string.join(sys.argv[3:], ","))
|
|
|
|
try:
|
|
# check if outfile contains a placeholder
|
|
outfile % 1
|
|
except TypeError:
|
|
file, ext = os.path.splitext(outfile)
|
|
outfile = file + "%03d" + ext
|
|
|
|
ix = 1
|
|
|
|
im = Image.open(infile)
|
|
|
|
if html:
|
|
file, ext = os.path.splitext(outfile)
|
|
html = open(file+".html", "w")
|
|
html.write("<html>\n<body>\n")
|
|
|
|
while 1:
|
|
|
|
if frames[ix]:
|
|
im.save(outfile % ix)
|
|
print outfile % ix
|
|
|
|
if html:
|
|
html.write("<img src='%s'><br>\n" % outfile % ix)
|
|
|
|
try:
|
|
im.seek(ix)
|
|
except EOFError:
|
|
break
|
|
|
|
ix = ix + 1
|
|
|
|
if html:
|
|
html.write("</body>\n</html>\n")
|