#!/usr/bin/python import os, re, optparse, sys import Image def extractMCsFromSwf(path_to_swf,output_dir): """docstring for extractJpegsFromSwf""" raw_list = os.popen("/usr/local/bin/swfextract %s | grep -i movieclips" % path_to_swf).readlines(); #print raw_list if (len(raw_list) == 0): return False; item_output = raw_list[0]; match_res = re.search("ID\(s\) ([-\d, ]+)",item_output); id_list = match_res.group(1) ##make it an array master_array = [] id_array = id_list.split(", ") for this_id in id_array: match_res = re.search("(\d+)-(\d+)",this_id); if match_res: (start,end) = match_res.groups() master_array.extend(range(int(start),int(end)+1)) else: master_array.append(this_id) #print master_array iteration = 1 for this_id in master_array: #print this_id image_name = output_dir + "/%s.swf" % this_id cmd = "/usr/local/bin/swfextract -o %s -i %s %s" % (image_name,this_id,path_to_swf) os.system(cmd) iteration += 1 def extractJpegsFromSwf(path_to_swf,output_dir): """docstring for extractJpegsFromSwf""" ## get a list of the jpeg IDs raw_list = os.popen("/usr/local/bin/swfextract %s | grep -i jpeg" % path_to_swf).readlines(); #print raw_list if (len(raw_list) == 0): return False; jpeg_output = raw_list[0]; match_res = re.search("ID\(s\) ([-\d, ]+)",jpeg_output); id_list = match_res.group(1) ##make it an array master_array = [] id_array = id_list.split(", ") for this_id in id_array: match_res = re.search("(\d+)-(\d+)",this_id); if match_res: (start,end) = match_res.groups() master_array.extend(range(int(start),int(end)+1)) else: master_array.append(this_id) #print master_array iteration = 1 for this_id in master_array: #print this_id image_name = output_dir + "/%s.jpg" % this_id cmd = "/usr/local/bin/swfextract -o %s -j %s %s" % (image_name,this_id,path_to_swf) os.system(cmd) iteration += 1 ## make sure the resulting image is larger that 1x1 im = Image.open(image_name) if (im.size == (1,1)): ## delete it os.remove(image_name) def processDirectory(the_dir): """docstring for processDirectory""" allDirectoryEntities = os.listdir(the_dir) for thisEntity in allDirectoryEntities: abs_path_to_file = the_dir + "/" + thisEntity if (os.path.isfile(abs_path_to_file)): print "processing %s" % thisEntity ##make a dir from that basename basename_res = re.search("(.*)\.([^\.])+$",thisEntity) basename = basename_res.group(1) if (basename): new_dir = the_dir + "/" + basename; #print "making %s " % new_dir try: os.mkdir(new_dir) except OSError: print "dir exists" extractJpegsFromSwf(abs_path_to_file,new_dir) #extractMCsFromSwf(abs_path_to_file,new_dir) def main(): parser = optparse.OptionParser() parser.set_usage("swf_jpeg_extractor.py [options] ") parser.set_description("simply pass the directory containing your swfs") ## no options supported for now: """ parser.add_option("-p", "--pages", dest="pages", default="1", help="comma-delimited pages (e.g. 1,2,3; ALL)", metavar="STRING") parser.add_option("-r", "--res", dest="res", default=72.0, help="resolution (e.g. 72)", metavar="FLOAT") parser.add_option("-o", "--out", dest="outputPath", default=None, help="path to JPEG for output", metavar="FILE") parser.add_option("--width", dest="maxWidth", default=0, help="maximum width of jpeg", metavar="INTEGER") parser.add_option("--height", dest="maxHeight", default=0, help="maximum height of jpeg", metavar="INTEGER") """ (opts, args) = parser.parse_args() if len (args) < 1: parser.print_help() sys.exit() for path in args: processDirectory(path) if __name__=='__main__': #start = clock() #print "Starting" main() #finish = clock() #print("seconds:%r" %(finish - start))