#!/usr/bin/env python # # HvZCardCreator: backend to create id cards for pyHvZPlayer import Image, ImageDraw, ImageFont import qrcode, sys, tempfile, os def createCard(player_name, player_id, avatar_loc, card_width, save_loc): """Creates a card containing an avatar, the players name, the players id, and a QR Code.""" # Create the card image and draw surface card_height = .6 * card_width card = Image.new("RGB", (int(card_width), int(card_height)), "#FFFFFF") card_draw = ImageDraw.Draw(card) # Load and scale the avatar try: avatar = Image.open(avatar_loc) except IOError: raise Exception, "Could not open avatar file." avatar.thumbnail((int(card_width * .25), int(card_width * .25))) # Create a QR Code containing the player name and ID qr_encoder = qrcode.Encoder() qr_image = qr_encoder.encode(player_name + '|' + player_id, version=2, mode=qr_encoder.mode.BINARY, eclevel=qr_encoder.eclevel.L, width=int(card_width * .4)) # Create a temporary file and save the QR Code to it (fd, fname) = tempfile.mkstemp() qr_f = os.fdopen(fd, "w+b") qr_image.save(qr_f, "png") # Load a font to write the name and id font = ImageFont.truetype("standard_font.ttf", 16) ##### # Build the card image ##### # place avatar card.paste(avatar, (int(card_width * .1), int(card_width * .1))) # build a box around the avatar card_draw.rectangle(((card_width * .1, card_width * .1), (avatar.size[0] + card_width * .1, avatar.size[1] + card_width * .1)), outline=0) # place text card_draw.text((card_width * .1, avatar.size[1] + card_width * .1 + 10), player_name, font=font, fill=0) card_draw.text((card_width * .1, avatar.size[1] + card_width * .1 + 26), player_id, font=font, fill=0) # place QR Code image = Image.open(fname) card.paste(image, (int(card_width * .5), int(card_width * .1))) # Save the card try: card.save(save_loc) except IOError: raise Exception, "Could not save to card location."