Mercurial > repos > tomasz-bednarz > image_tools
comparison tools/image_do.py @ 0:64374d852e36
Uploaded
author | tomasz-bednarz |
---|---|
date | Mon, 25 Nov 2013 21:32:12 -0500 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:64374d852e36 |
---|---|
1 import os | |
2 import optparse | |
3 | |
4 from PIL import Image | |
5 from PIL import ImageDraw | |
6 from image_transforms import tileify | |
7 from image_transforms import calculate_random_location | |
8 from image_transforms import filmify_image | |
9 | |
10 | |
11 def main(): | |
12 | |
13 # Parse options | |
14 parser = optparse.OptionParser() | |
15 parser.add_option( | |
16 "-i", | |
17 dest="inputImage", | |
18 help="Input Image", | |
19 metavar="FILE" | |
20 ) | |
21 parser.add_option( | |
22 "-o", | |
23 dest="outputImage", | |
24 help="Output Image", | |
25 metavar="FILE" | |
26 ) | |
27 parser.add_option( | |
28 "--command", | |
29 "-c", | |
30 dest="imageCommand", | |
31 help="Command", | |
32 metavar="string" | |
33 ) | |
34 parser.add_option( | |
35 "-s", | |
36 dest='custom_string', | |
37 help='String to be placed as decription' | |
38 ) | |
39 parser.add_option( | |
40 "-e", | |
41 dest='image_ext', | |
42 help='Image extension' | |
43 ) | |
44 (opts, args) = parser.parse_args() | |
45 | |
46 mandatory_options = ['inputImage', 'outputImage', 'image_ext'] | |
47 for option in mandatory_options: | |
48 if not opts.__dict__[option]: | |
49 print "One or more options are missing\n" | |
50 parser.print_help() | |
51 exit(-1) | |
52 | |
53 inputImage_fn = opts.inputImage | |
54 outputImage_fn =opts.outputImage | |
55 input_extension = opts.image_ext | |
56 if input_extension == "jpg": | |
57 input_extension="jpeg" | |
58 | |
59 listOfValues = opts.imageCommand.split() | |
60 | |
61 try: | |
62 imageIn = Image.open(inputImage_fn) | |
63 except IOError: | |
64 print "Cannot open file: " + inputImage_fn | |
65 | |
66 if listOfValues[0] == "filmify": | |
67 """ | |
68 Transform image into a signed movie frame. | |
69 Use: | |
70 python image_do.py -i input.jpg -o output.jpg -c "filmify" -s "hello world" -e "jpg" | |
71 """ | |
72 print "command: " + listOfValues[0] | |
73 new_image_data = filmify_image(imageIn) | |
74 add_text_header(new_image_data, text=opts.custom_string) | |
75 new_image_data.save(outputImage_fn, input_extension); | |
76 # new_image_data.show(); | |
77 elif listOfValues[0] == "tileify": | |
78 """ | |
79 Breaks image up into rectangles and shifts them a random distance. | |
80 Parameters: number of tiles, max shift | |
81 Use: | |
82 python image_do.py -i input.jpg -o output.jpg -c "tileify num_tiles max_shift" -e "jpg" | |
83 """ | |
84 print "command: " + listOfValues[0] | |
85 num_tiles = int(listOfValues[1]) | |
86 max_shift = int(listOfValues[2]) | |
87 new_image_data = tileify(imageIn, num_tiles, max_shift) | |
88 new_image_data.save(outputImage_fn, input_extension); | |
89 # new_image_data.show(); | |
90 elif listOfValues[0] == "rotate": | |
91 """ | |
92 Rotates an image the given number of degrees counter clockwise around its centre. | |
93 Parameters: deg, 1 - expand the image or 0 - leave same size, filter | |
94 Use: | |
95 python image_do.py -i input.jpg -o output.jpg -c "rotate 45 1" -e "jpg" | |
96 """ | |
97 print "command: " + listOfValues[0] | |
98 new_image_data = imageIn.rotate(int(listOfValues[1]), expand=int(listOfValues[2])) | |
99 new_image_data.save(outputImage_fn, input_extension); | |
100 # new_image_data.show(new_image_data) | |
101 elif listOfValues[0] == "resize": | |
102 """ | |
103 Resizes the image. | |
104 Parameters: width, height, filter: 0 = NEAREST, 1 = ANTIALIAS, 2 = BILINEAR, 3 = BICUBIC | |
105 Use: | |
106 python image_do.py -i sydney.jpg -o o.jpg -c "resize 140 140 0" | |
107 """ | |
108 print "command: " + listOfValues[0] | |
109 size = int(listOfValues[1]), int(listOfValues[2]) | |
110 filterr = int(listOfValues[3]) | |
111 new_image_data = imageIn.resize(size, filterr) | |
112 new_image_data.save(outputImage_fn, input_extension); | |
113 # new_image_data.show() | |
114 | |
115 elif listOfValues[0] == "crop": | |
116 # bbox | |
117 # returns a copy of a rectangular region from the current image. The box is a 4-tuple defining the left, upper, right, and lower pixel coordinate. | |
118 # example: python image_do.py -i sydney.jpg -o sydney_out.jpg -c "crop 0 0 10 10" | |
119 print "command: " + listOfValues[0] | |
120 new_image_data = imageIn.crop((int(listOfValues[1]), int(listOfValues[2]), int(listOfValues[3]), int(listOfValues[4]))) | |
121 new_image_data.save(outputImage_fn); | |
122 # new_image_data.show(new_image_data) | |
123 | |
124 | |
125 def add_text_header(image_data, text='cloudimaging.net.au'): | |
126 """ | |
127 Add text to the top of the document | |
128 Inputs | |
129 image_data - image to have text added | |
130 text - string to add | |
131 """ | |
132 # TODO add string wrapping for long strings | |
133 # TODO figure this out programatically | |
134 text_location = (300, 1) | |
135 # This is white | |
136 fill_color = 255 | |
137 # This happens if -s wasn't set | |
138 if text == None: | |
139 text = 'cloudimaging.net.au' | |
140 draw = ImageDraw.Draw(image_data) | |
141 draw.text(text_location, text, fill=fill_color) | |
142 | |
143 | |
144 if __name__ == "__main__": | |
145 main() | |
146 |