preview_gen.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #!/usr/bin/python
  2. import os
  3. import sys
  4. import Image
  5. try :
  6. arg = sys.argv[1]
  7. except IndexError :
  8. print "Usage: preview_gen.py <index_file>"
  9. sys.exit(1)
  10. try :
  11. index = open(arg, "r")
  12. except IOError :
  13. print "Failed to open index file%s" %s (arg)
  14. sys.exit(1)
  15. preview = []
  16. for line in index.readlines() :
  17. if ":" in line :
  18. line = line.rstrip('\n')
  19. preview.append(line.split(':'))
  20. print "Generating preview images..."
  21. for fn, place in preview :
  22. try :
  23. imi = Image.open(fn)
  24. except IOError :
  25. print "Failed to open %s" % (fn)
  26. sys.exit(1)
  27. w, h = imi.size
  28. if h != w / 2:
  29. print "Incompatible texture size %s" % (fn)
  30. sys.exit(1)
  31. s = w / 64
  32. imo = Image.new("RGBA", (16 * s, 32 * s))
  33. if place == "all" or place == "head" :
  34. face = (40 * s, 8 * s, 48 * s, 16 * s)
  35. side_l = (56 * s, 8 * s, 57 * s, 16 * s)
  36. side_r = (63 * s, 8 * s, 64 * s, 16 * s)
  37. imo.paste(imi.crop(side_l), (4 * s, 0, 5 * s, 8 * s))
  38. imo.paste(imi.crop(side_r), (11 * s, 0, 12 * s, 8 * s))
  39. imo.paste(imi.crop(face), (4 * s, 0, 12 * s, 8 * s))
  40. if place == "all" or place == "torso" :
  41. arm = (44 * s, 20 * s, 48 * s, 32 * s)
  42. body = (20 * s, 20 * s, 28 * s, 32 * s)
  43. imo.paste(imi.crop(arm), (0 * s, 8 * s, 4 * s, 20 * s))
  44. imo.paste(imi.crop(arm).transpose(Image.FLIP_LEFT_RIGHT),
  45. (12 * s, 8 * s, 16 * s, 20 * s))
  46. imo.paste(imi.crop(body), (4 * s, 8 * s, 12 * s, 20 * s))
  47. if place == "all" or place == "legs" :
  48. leg = (4 * s, 20 * s, 8 * s, 32 * s)
  49. imo.paste(imi.crop(leg), (4 * s, 20 * s, 8 * s, 32 * s))
  50. imo.paste(imi.crop(leg).transpose(Image.FLIP_LEFT_RIGHT),
  51. (8 * s, 20 * s, 12 * s, 32 * s))
  52. if place == "all" or place == "feet" :
  53. boot = (20 * s, 4 * s, 24 * s, 11 * s)
  54. imo.paste(imi.crop(boot), (4 * s, 25 * s, 8 * s, 32 * s))
  55. imo.paste(imi.crop(boot).transpose(Image.FLIP_LEFT_RIGHT),
  56. (8 * s, 25 * s, 12 * s, 32 * s))
  57. size = (32 * s, 64 * s)
  58. imo = imo.resize(size)
  59. if place == "shield" :
  60. shield = (0, 0, 16 * s, 16 * s)
  61. imo.paste(imi.crop(shield), (16 * s, 32 * s, 32 * s, 48 * s))
  62. outfile = fn.replace(".png", "_preview.png")
  63. imo.save(outfile)
  64. print outfile