#! /usr/local/bin/ruby -w
require 'RMagick'

# Demonstrate the Image#raise method.
# Make a raised "button" with the b&w cartoon
# image of a snake on a granite background.

# Read the snake image, convert it to b&w with quantize,
# then use matte_replace to make its background transparent.
snake = Magick::Image.read('images/Snake.wmf').first

# This call to zoom demonstrates that the zoom doesn't have
# to be proportional. The snake looks pretty good at this size.
snake = snake.resize(snake.columns/2, snake.rows/4)
snake = snake.quantize(256, Magick::GRAYColorspace)
snake = snake.matte_replace(0,0)

# Now make the button background using ImageListMagick's
# builtin "granite" image format.  Make the background
# a bit larger than the snake so the snake's edges
# don't get folded into the raised edges of the background.
granite = Magick::Image.read('granite:').first
granite_fill = Magick::TextureFill.new(granite)
bg = Magick::Image.new(snake.columns+20, snake.rows+20, granite_fill)

# Here's the call to raise. Take all the defaults: the raised edges
# will be 6 pixels wide and the result will look raised instead of lowered.
bg = bg.raise

# Composite the snake over the background. Since the snake's background
# is transparent, the granite texture will show through nicely.
result = bg.composite(snake, Magick::CenterGravity, Magick::OverCompositeOp)
#result.display
result.write('raise.gif')
exit
