Guest User

Untitled

a guest
Feb 21st, 2018
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.76 KB | None | 0 0
  1. require 'RMagick'
  2. include Magick
  3.  
  4. module Magick
  5. class Draw
  6. def star(sides, inner_radius, outer_radius)
  7. theta = 0.0
  8. incr = Math::PI * 2.0 / sides
  9. half_incr = incr / 2.0
  10. points = []
  11. sides.times do
  12. points << outer_radius * Math::cos(theta)
  13. points << outer_radius * Math::sin(theta)
  14. points << inner_radius * Math::cos(theta + half_incr)
  15. points << inner_radius * Math::sin(theta + half_incr)
  16. theta += incr
  17. end
  18. polygon *points
  19. end
  20. end
  21.  
  22. class Image
  23. def star(sides, inner_radius, outer_radius, stroke, fill)
  24. gc = Draw.new
  25. gc.translate columns/2.0, rows/2.0
  26. gc.fill fill
  27. gc.stroke stroke
  28. gc.star sides, inner_radius, outer_radius
  29. gc.draw self
  30. end
  31. end
  32. end
  33.  
  34.  
  35.  
  36. WIDTH = 650
  37. HEIGHT = 40
  38.  
  39. # Create gradient background
  40.  
  41. stripes = ImageList.new
  42.  
  43. top_grad = GradientFill.new(0, 0, WIDTH, 0, "#dddddd", "#888888")
  44. stripes << Image.new(WIDTH, HEIGHT, top_grad)
  45.  
  46. bottom_grad = GradientFill.new(0, 0, WIDTH, 0, "#757575", "#555555")
  47. stripes << Image.new(WIDTH, HEIGHT, bottom_grad)
  48.  
  49. combined_grad = stripes.append(true)
  50.  
  51. color = Image.new(combined_grad.columns, combined_grad.rows) {
  52. self.background_color = "#87a5ff"
  53. }
  54. background = combined_grad.composite(color, CenterGravity, ColorizeCompositeOp)
  55.  
  56.  
  57. # Draw "RMAGICK" with its reflection
  58. gc = Draw.new
  59. gc.fill = 'white'
  60. gc.stroke = 'none'
  61. gc.pointsize = 42
  62.  
  63. gc.annotate(background, 0, 0, 70, HEIGHT, "NeRMe:")
  64.  
  65. reflection = stripes[1].flip
  66. reflection.composite!(color, CenterGravity, ColorizeCompositeOp)
  67. gc.annotate(reflection, 0, 0, 70, HEIGHT, "NeRMe:")
  68.  
  69. grad = GradientFill.new(0, 0, WIDTH, 0, "black", "gray35")
  70. opacity_mask = Image.new(WIDTH, HEIGHT, grad)
  71.  
  72. reflection.matte = true
  73. opacity_mask.matte = false
  74. reflection.composite!(opacity_mask, CenterGravity, CopyOpacityCompositeOp)
  75.  
  76. reflection.flip!
  77. background.composite!(reflection, SouthWestGravity, OverCompositeOp)
  78.  
  79.  
  80. # Add soft shadow and put composite on a larger canvas
  81.  
  82. shadow = Image.new(background.columns+10, background.rows+10)
  83.  
  84. gc = Draw.new
  85. gc.fill "gray30"
  86. gc.rectangle 5, 5, background.columns+5, background.rows+5
  87. gc.draw(shadow)
  88. shadow = shadow.blur_image(0, 2)
  89.  
  90. shadowed_background = shadow.composite(background, CenterGravity, OverCompositeOp)
  91.  
  92. big_canvas = Image.new(shadowed_background.columns, HEIGHT*5)
  93. big_background = big_canvas.composite(shadowed_background, NorthGravity, OverCompositeOp)
  94.  
  95.  
  96. # Add green starburst with shadow
  97.  
  98. black_star = Image.new(170,170)
  99. black_star.star(25, 60, 80, 'none', 'black')
  100. black_star.rotate!(-20)
  101.  
  102. star_shadow = black_star.copy.blur_image(3, 2)
  103.  
  104. shadow_mask = star_shadow.negate
  105.  
  106. shadow_mask.matte = false
  107. star_shadow.matte = true
  108. star_shadow.composite!(shadow_mask, CenterGravity, CopyOpacityCompositeOp)
  109.  
  110. grad = GradientFill.new(0, 0, black_star.columns, 0, "#99eb24", "#3c7f05}")
  111. green_grad = Image.new(black_star.columns, black_star.rows, grad)
  112.  
  113. gc = Draw.new
  114. gc.annotate(green_grad, 0, 0, 0, 0, "Ruby\n+\nMagick!") do
  115. gc.gravity = CenterGravity
  116. gc.stroke = 'none'
  117. gc.fill = 'yellow'
  118. gc.pointsize = 24
  119. gc.font_weight = BoldWeight
  120. end
  121. green_grad.rotate!(-20)
  122.  
  123. inverse_black_star = black_star.negate
  124. inverse_black_star.matte = false
  125. green_grad.matte = true
  126. green_star = green_grad.composite(inverse_black_star, CenterGravity, CopyOpacityCompositeOp)
  127.  
  128. # Uncomment this line if you're using RMagick < 1.10.1
  129. #green_star.crop!(CenterGravity, star_shadow.columns, star_shadow.rows)
  130.  
  131. shadowed_green_star = star_shadow.composite(green_star, CenterGravity, OverCompositeOp)
  132.  
  133. result = big_background.composite(shadowed_green_star, 400, 0, OverCompositeOp)
  134. result.write('result.jpg')
Add Comment
Please, Sign In to add comment