Mercurial > ec-dotfiles
annotate bin/recompress @ 92:03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
| author | Edho Prima Arief <edho@myconan.net> | 
|---|---|
| date | Thu, 14 Jul 2011 00:34:46 +0700 | 
| parents | |
| children | 4f954c1e2fdc | 
| rev | line source | 
|---|---|
| 
92
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
1 #!/usr/bin/env python | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
2 | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
3 import sys, os | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
4 from PIL import Image | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
5 | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
6 | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
7 # return codes: | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
8 # 0 = ok | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
9 # 1 = error opening file (not an image, not a file, unreadable or whatever) | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
10 # 2 = error saving file (no write permission) | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
11 # 3 = not a png file | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
12 def repng(filename): | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
13 retcode = 0 | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
14 try: | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
15 im = Image.open(filename) | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
16 if im.format == "PNG": | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
17 try: | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
18 im.save(filename, optimize=1) | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
19 except: | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
20 retcode = 3 | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
21 else: | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
22 retcode = 2 | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
23 except: | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
24 retcode = 1 | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
25 return retcode | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
26 | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
27 def hbytes(inbyte): | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
28 units = ["B", "kB", "MB", "GB", "TB", "PB"] | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
29 outbyte = float(inbyte) | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
30 current_unit = 0 | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
31 while outbyte > 1000: | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
32 outbyte /= 1000 | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
33 current_unit += 1 | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
34 return "%.2f %s" % (outbyte, units[current_unit]) | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
35 | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
36 if __name__ == "__main__": | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
37 for filename in sys.argv[1:]: | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
38 print "Recompressing %s:" % filename, | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
39 sys.stdout.flush() | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
40 try: | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
41 byte_orig = os.path.getsize(filename) | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
42 re = repng(filename) | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
43 if re == 0: | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
44 byte_new = os.path.getsize(filename) | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
45 print "OK (%s => %s, %.2f%% saving)" % (hbytes(byte_orig), hbytes(byte_new), (byte_orig - byte_new)*100/float(byte_orig)), | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
46 elif re == 1: | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
47 print "Not an image or corrupt file", | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
48 elif re == 2: | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
49 print "No write permission", | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
50 elif re == 3: | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
51 print "Not a PNG file", | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
52 except: | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
53 print "(%s: %s)" % (sys.exc_type, sys.exc_value) | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
54 print "Not a file or no read permission", | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
55 re = 1 | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
56 print "[%s]" % re | 
| 
 
03b02463cc16
omg python, recompresses image files. Because mplayer's png writer doesn't write compressed png.
 
Edho Prima Arief <edho@myconan.net> 
parents:  
diff
changeset
 | 
57 | 
