|
| 1 | +# Author: illuz <iilluzen[at]gmail.com> |
| 2 | +# File: add_number_to_image.py |
| 3 | +# Create Date: 2015-02-08 23:52:01 |
| 4 | +# Descripton: Add a number to right top corner of images. |
| 5 | +# Will backup the image in ./[file]_bak.[ext] |
| 6 | +# Usage: add_number_to_image.py [image] [number] |
| 7 | + |
| 8 | +from PIL import Image, ImageDraw, ImageFont |
| 9 | +import sys, shutil |
| 10 | + |
| 11 | + |
| 12 | +# backup file |
| 13 | +# @return nothing |
| 14 | +def back_file(filename): |
| 15 | + p = filename.rfind('.') |
| 16 | + shutil.copyfile(filename, filename[:p] + '_bak' + filename[p:]) |
| 17 | + |
| 18 | + |
| 19 | +# add number to right top corner |
| 20 | +# @return nothing |
| 21 | +def add_number_to_image(im, num): |
| 22 | + xsize, ysize = im.size |
| 23 | + left, top = int(xsize / 20.0 * 13), int(xsize / 20.0) |
| 24 | + right, bottom = int(xsize / 20.0 * 19), int(xsize / 20.0 * 7) |
| 25 | + draw = ImageDraw.Draw(im) |
| 26 | + draw.ellipse([left, top, right, bottom], (255, 0, 0)) |
| 27 | + font=ImageFont.truetype("DroidSansMono.ttf", int(xsize / 20 * 4)) |
| 28 | + draw.text((left + xsize / 10.0, top + xsize / 30), str(num), (0, 0, 0), font=font) |
| 29 | + del draw |
| 30 | + |
| 31 | + |
| 32 | +# open image and deal font and get Draw |
| 33 | +# @return a ImageDraw |
| 34 | +def deal(f, num): |
| 35 | + if (num == None): |
| 36 | + num = 0 |
| 37 | + if (num > '9'): |
| 38 | + num = '9+' |
| 39 | + im = Image.open(f) |
| 40 | + add_number_to_image(im, num) |
| 41 | + im.save(f) |
| 42 | + |
| 43 | + |
| 44 | +def main(): |
| 45 | + if len(sys.argv) <= 1: |
| 46 | + print "Need at least 1 parameter." |
| 47 | + return |
| 48 | + for i in range(1, len(sys.argv), 2): |
| 49 | + f = sys.argv[i] |
| 50 | + n = sys.argv[i + 1] if i + 1 < len(sys.argv) else None |
| 51 | + try: |
| 52 | + back_file(f) |
| 53 | + deal(f, n) |
| 54 | + print "Success add number to image file", f |
| 55 | + except IOError: |
| 56 | + print "Cannot open image", f, '!' |
| 57 | + pass |
| 58 | + |
| 59 | + |
| 60 | +if __name__ == '__main__': |
| 61 | + main() |
| 62 | + |
0 commit comments