Gr8Boi

python image

Oct 3rd, 2017
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.33 KB | None | 0 0
  1. def get_deck_image(self, deck, deck_name=None, deck_author=None):
  2. """Construct the deck with Pillow and return image."""
  3. card_w = 302
  4. card_h = 363
  5. card_x = 30
  6. card_y = 30
  7. font_size = 50
  8. txt_y_line1 = 430
  9. txt_y_line2 = 500
  10. txt_x_name = 50
  11. txt_x_cards = 503
  12. txt_x_elixir = 1872
  13.  
  14. bg_image = Image.open("data/deck/img/deck-bg-b.png")
  15. size = bg_image.size
  16.  
  17. font_file_regular = "data/deck/fonts/OpenSans-Regular.ttf"
  18. font_file_bold = "data/deck/fonts/OpenSans-Bold.ttf"
  19.  
  20. image = Image.new("RGBA", size)
  21. image.paste(bg_image)
  22.  
  23. if not deck_name:
  24. deck_name = "Deck"
  25.  
  26. # cards
  27. for i, card in enumerate(deck):
  28. card_image_file = "data/deck/img/cards/{}.png".format(card)
  29. card_image = Image.open(card_image_file)
  30. # size = (card_w, card_h)
  31. # card_image.thumbnail(size)
  32. box = (card_x + card_w * i,
  33. card_y,
  34. card_x + card_w * (i + 1),
  35. card_h + card_y)
  36. image.paste(card_image, box, card_image)
  37.  
  38. # elixir
  39. total_elixir = 0
  40. # total card exclude mirror (0-elixir cards)
  41. card_count = 0
  42. for card_key, card_value in self.crdata["Cards"].items():
  43. if card_key in deck:
  44. total_elixir += card_value["elixir"]
  45. if card_value["elixir"]:
  46. card_count += 1
  47. average_elixir = "{:.3f}".format(total_elixir / card_count)
  48.  
  49. # text
  50. # Take out hyphnens and capitlize the name of each card
  51. card_names = [string.capwords(c.replace('-', ' ')) for c in deck]
  52.  
  53. txt = Image.new("RGBA", size)
  54. txt_name = Image.new("RGBA", (txt_x_cards - 30, size[1]))
  55. font_regular = ImageFont.truetype(font_file_regular, size=font_size)
  56. font_bold = ImageFont.truetype(font_file_bold, size=font_size)
  57.  
  58. d = ImageDraw.Draw(txt)
  59. d_name = ImageDraw.Draw(txt_name)
  60.  
  61. line1 = ', '.join(card_names[:4])
  62. line2 = ', '.join(card_names[4:])
  63. # card_text = '\n'.join([line0, line1])
  64.  
  65. deck_author_name = deck_author.name if deck_author else ""
  66.  
  67. d_name.text(
  68. (txt_x_name, txt_y_line1), deck_name, font=font_bold,
  69. fill=(0xff, 0xff, 0xff, 255))
  70. d_name.text(
  71. (txt_x_name, txt_y_line2), deck_author_name, font=font_regular,
  72. fill=(0xff, 0xff, 0xff, 255))
  73. d.text(
  74. (txt_x_cards, txt_y_line1), line1, font=font_regular,
  75. fill=(0xff, 0xff, 0xff, 255))
  76. d.text(
  77. (txt_x_cards, txt_y_line2), line2, font=font_regular,
  78. fill=(0xff, 0xff, 0xff, 255))
  79. d.text(
  80. (txt_x_elixir, txt_y_line1), "Avg elixir", font=font_bold,
  81. fill=(0xff, 0xff, 0xff, 200))
  82. d.text(
  83. (txt_x_elixir, txt_y_line2), average_elixir, font=font_bold,
  84. fill=(0xff, 0xff, 0xff, 255))
  85.  
  86. image.paste(txt, (0, 0), txt)
  87. image.paste(txt_name, (0, 0), txt_name)
  88.  
  89. # scale down and return
  90. scale = 0.5
  91. scaled_size = tuple([x * scale for x in image.size])
  92. image.thumbnail(scaled_size)
  93.  
  94. return image
Add Comment
Please, Sign In to add comment