users.rb 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. class UsersController
  2. def self.stat_image(user, member, stats=nil)
  3. size_width = 570;
  4. size_height = 376;
  5. stats_frame = "../../images/LevelUp.png"
  6. level_up = "../../images/LevelUpFont.png"
  7. user_url_img = "../../images/Image_Builder/user_url_img.png"
  8. output_file = "../../images/Image_Builder/LevelUp"
  9. Down.download(member.avatar_url, destination: user_url_img)
  10. #Gif Destroyer
  11. i = Magick::ImageList.new(user_url_img)
  12. i[0].write(user_url_img) if i.count > 1
  13. if stats
  14. merge_image(
  15. [stats_frame, level_up, user_url_img],
  16. output_file,
  17. size_width,
  18. size_height,
  19. [nil, nil, 19],
  20. [nil, nil, 92],
  21. [size_width, size_width, 165],
  22. [size_height, size_height, 165]
  23. )
  24. else
  25. merge_image(
  26. [stats_frame, user_url_img],
  27. output_file,
  28. size_width,
  29. size_height,
  30. [nil, 19],
  31. [nil, 92],
  32. [size_width, 165],
  33. [size_height, 165]
  34. )
  35. end
  36. ratio = 0.5
  37. user_name = member.nickname || member.name
  38. short_name = user_name.length > 25 ? "#{user_name[0..22]}..." : user_name
  39. rank = User.order(unboosted_xp: :desc)
  40. user_rank = rank.detect{ |r| r.id == user.id }
  41. gc = Draw.new
  42. gc.font('../../OpenSans-SemiBold.ttf')
  43. gc.stroke('#39c4ff').fill('#39c4ff')
  44. gc.rectangle(42, 48, 42 + (95 * ratio), 48 + 3)
  45. gc.stroke('none').fill('black')
  46. gc.pointsize('15')
  47. gc.text(15,25, short_name)
  48. gc.text(40, 45, user.level.to_s)
  49. gc.text(15, 290, user_rank.to_s)
  50. gc.text(40, 65, user.boosted_xp.to_s)
  51. gc.stroke('white').fill('white')
  52. gc.pointsize('30')
  53. gc.text(40,330, user_name)
  54. reached = "reached level #{user.level}!"
  55. gc.text(40,360, reached)
  56. if stats
  57. gc.stroke('none').fill('black')
  58. gc.pointsize('18')
  59. gc.text(450, 97, stats['hp'].to_s)
  60. gc.text(450, 127, stats['attack'].to_s)
  61. gc.text(450, 159, stats['defense'].to_s)
  62. gc.text(450, 191, stats['sp_attack'].to_s)
  63. gc.text(450, 222, stats['sp_defense'].to_s)
  64. gc.text(450, 255, stats['speed'].to_s)
  65. gc.stroke('none').fill('maroon')
  66. gc.text(505, 97, user.hp - stats['hp'].to_s)
  67. gc.text(505, 127, user.attack - stats['attack'].to_s)
  68. gc.text(505, 159, user.defense - stats['defense'].to_s)
  69. gc.text(505, 191, user.sp_attack - stats['sp_attack'].to_s)
  70. gc.text(505, 222, user.sp_defense - stats['sp_defense'].to_s)
  71. gc.text(505, 255, user.speed - stats['speed'].to_s)
  72. else
  73. gc.stroke('none').fill('black')
  74. gc.pointsize('18')
  75. gc.text(450, 97, user.hp.to_s)
  76. gc.text(450, 127, user.attack.to_s)
  77. gc.text(450, 159, user.defense.to_s)
  78. gc.text(450, 191, user.sp_attack.to_s)
  79. gc.text(450, 222, user.sp_defense.to_s)
  80. gc.text(450, 255, user.speed.to_s)
  81. end
  82. u = Magick::ImageList.new("#{output_file}.png")
  83. gc.draw(u[0])
  84. u.write("#{output_file}.png")
  85. end
  86. end