Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
executable file 325 lines (258 sloc) 8.635 kB
#!/usr/bin/env ruby -w
#
# Simple demo program for RMagick
#
# Concept and algorithms lifted from Magick++ demo script written
# by Bob Friesenhahn.
#
require 'rmagick'
include Magick
#
# RMagick version of Magick++/demo/demo.cpp
#
Font = 'Helvetica'
begin
puts 'Read images...'
model = ImageList.new('../doc/ex/images/model.miff')
model.border_color = 'black'
model.background_color = 'black'
model.cur_image[:Label] = 'RMagick'
smile = ImageList.new('../doc/ex/images/smile.miff')
smile.border_color = 'black'
smile.cur_image[:Label] = 'Smile'
#
# Create image stack
#
puts 'Creating thumbnails'
# Construct an initial list containing five copies of a null
# image. This will give us room to fit the logo at the top.
# Notice I specify the width and height of the images via the
# optional "size" attribute in the parm block associated with
# the read method. There are two more examples of this, below.
example = ImageList.new
5.times { example.read('NULL:black') { self.size = '70x70'} }
puts ' add noise...'
example << model.add_noise(LaplacianNoise)
example.cur_image[:Label] = 'Add Noise'
puts ' annotate...'
example << model.cur_image.copy
example.cur_image[:Label] = 'Annotate'
draw = Draw.new
draw.annotate(example, 0, 0, 0, 20, 'RMagick') do
self.pointsize = 18
self.font = Font
self.stroke = 'gold'
self.fill = 'gold'
self.gravity = NorthGravity
end
puts ' blur...'
example << model.blur_image(0.0, 1.5)
example.cur_image[:Label] = 'Blur'
puts ' border...'
example << model.border(6, 6, 'gold')
example.cur_image[:Label] = 'Border'
puts ' channel...'
example << model.channel(RedChannel)
example.cur_image[:Label] = 'Channel'
puts ' charcoal...'
example << model.charcoal
example.cur_image[:Label] = 'Charcoal'
puts ' composite...'
example << model.composite(smile, 35, 65, OverCompositeOp)
example.cur_image[:Label] = 'Composite'
puts ' contrast...'
example << model.contrast(false)
example.cur_image[:Label] = 'Contrast'
puts ' convolve...'
kernel = [ 1, 1, 1, 1, 4, 1, 1, 1, 1 ]
example << model.convolve(3, kernel)
example.cur_image[:Label] = 'Convolve'
puts ' crop...'
example << model.crop(25, 50, 80, 80)
example.cur_image[:Label] = 'Crop'
puts ' despeckle...'
example << model.despeckle
example.cur_image[:Label] = 'Despeckle'
puts ' draw...'
example << model.cur_image.copy
example.cur_image[:Label] = 'Draw'
gc = Draw.new
gc.fill 'black'
gc.fill_opacity 0
gc.stroke 'gold'
gc.stroke_width 2
gc.circle 60,90, 60,120
gc.draw(example)
puts ' edge...'
example << model.edge(0)
example.cur_image[:Label] = 'Detect Edges'
puts ' emboss...'
example << model.emboss
example.cur_image[:Label] = 'Emboss'
puts ' equalize...'
example << model.equalize
example.cur_image[:Label] = 'Equalize'
puts ' explode...'
example << model.implode(-1)
example.background_color = '#000000ff'
example.cur_image[:Label] = 'Explode'
puts ' flip...'
example << model.flip
example.cur_image[:Label] = 'Flip'
puts ' flop...'
example << model.flop
example.cur_image[:Label] = 'Flop'
puts ' frame...'
example << model.frame
example.cur_image[:Label] = 'Frame'
puts ' gamma...'
example << model.gamma_correct(1.6)
example.cur_image[:Label] = 'Gamma'
puts ' gaussian blur...'
example << model.gaussian_blur(1, 1.5)
example.cur_image[:Label] = 'Gaussian Blur'
# To add an Image in one of ImageMagick's built-in formats,
# call the read method. The filename specifies the format and
# any parameters it needs. The gradient format can be created in
# any size. Specify the desired size by assigning it, in the form
# "WxH", to the optional "size" attribute in the block associated
# with the read method. Here we create a gradient image that is
# the same size as the model image.
puts ' gradient...'
example.read('gradient:#20a0ff-#ffff00') do
self.size = Geometry.new(model.columns, model.rows)
end
example.cur_image[:Label] = 'Gradient'
puts ' grayscale...'
example << model.cur_image.quantize(256, GRAYColorspace)
example.cur_image[:Label] = 'Grayscale'
puts ' implode...'
example << model.implode(0.5)
example.cur_image[:Label] = 'Implode'
puts ' median filter...'
example << model.median_filter(0)
example.cur_image[:Label] = 'Median Filter'
puts ' modulate...'
example << model.modulate(1.10, 1.10, 1.10)
example.cur_image[:Label] = 'Modulate'
puts ' monochrome...'
example << model.cur_image.quantize(2, GRAYColorspace, false)
example.cur_image[:Label] = 'Monochrome'
puts ' negate...'
example << model.negate
example.cur_image[:Label] = 'Negate'
puts ' normalize...'
example << model.normalize
example.cur_image[:Label] = 'Normalize'
puts ' oil paint...'
example << model.oil_paint(3.0)
example.cur_image[:Label] = 'Oil Paint'
# The plasma format is very similar to the gradient format, above.
puts ' plasma...'
example.read('plasma:fractal') do
self.size = Geometry.new(model.columns, model.rows)
end
example.cur_image[:Label] = 'Plasma'
puts ' quantize...'
example << model.cur_image.quantize
example.cur_image[:Label] = 'Quantize'
puts ' raise...'
example << model.raise
example.cur_image[:Label] = 'Raise'
puts ' reduce noise...'
example << model.reduce_noise(3.0)
example.cur_image[:Label] = 'Reduce Noise'
puts ' resize...'
example << model.resize(0.50)
example.cur_image[:Label] = 'Resize'
puts ' roll...'
example << model.roll(20, 10)
example.cur_image[:Label] = 'Roll'
puts ' rotate...'
example << model.rotate(45).transparent('black')
example.cur_image[:Label] = 'Rotate'
puts ' scale...'
example << model.scale(0.60)
example.cur_image[:Label] = 'Scale'
puts ' segment...'
example << model.segment
example.cur_image[:Label] = 'Segment'
puts ' shade...'
example << model.shade(false, 30, 30)
example.cur_image[:Label] = 'Shade'
puts ' sharpen...'
example << model.sharpen(0.0, 1.0)
example.cur_image[:Label] = 'Sharpen'
puts ' shave...'
example << model.shave(10, 10)
example.cur_image[:Label] = 'Shave'
puts ' shear...'
example << model.shear(45, 45).transparent('black')
example.cur_image[:Label] = 'Shear'
puts ' spread...'
example << model.spread(3)
example.cur_image[:Label] = 'Spread'
puts ' solarize...'
example << model.solarize(50.0)
example.cur_image[:Label] = 'Solarize'
puts ' swirl...'
temp = model.copy
temp.background_color = '#000000ff'
example << temp.swirl(90)
example.cur_image[:Label] = 'Swirl'
puts ' unsharp mask...'
example << model.unsharp_mask(0.0, 1.0, 1.0, 0.05)
example.cur_image[:Label] = 'Unsharp Mask'
puts ' wave...'
temp = model.copy
temp.cur_image[:Label] = 'Wave'
temp.matte = true
temp.background_color = '#000000ff'
example << temp.wave(25, 150)
#
# Create image montage - notice the optional
# montage parameters are supplied via a block
#
puts 'Montage images...'
montage = example.montage do
self.geometry = '130x194+10+5>'
self.gravity = CenterGravity
self.border_width = 1
rows = (example.size + 4) / 5
self.tile = Geometry.new(5,rows)
self.compose = OverCompositeOp
# Use the ImageMagick built-in "granite" format
# as the background texture.
# self.texture = Image.read("granite:").first
self.background_color = 'white'
self.font = Font
self.pointsize = 18
self.fill = '#600'
self.filename = 'RMagick Demo'
# self.shadow = true
# self.frame = "20x20+4+4"
end
# Add the ImageMagick logo to the top of the montage. The "logo:"
# format is a fixed-size image, so I don't need to specify a size.
puts 'Adding logo image...'
logo = Image.read('logo:').first
if /GraphicsMagick/.match Magick_version
logo.resize!(200.0/logo.rows)
else
logo.crop!(98, 0, 461, 455).resize!(0.45)
end
# Create a new Image for the composited montage and logo
montage_image = ImageList.new
montage_image << montage.composite(logo, 245, 0, OverCompositeOp)
# Write the result to a file
montage_image.compression = RLECompression
montage_image.matte = false
puts 'Writing image ./rm_demo_out.miff'
montage_image.write 'rm_demo_out.miff'
# Uncomment the following lines to display image to screen
# puts "Displaying image..."
# montage_image.display
rescue
puts "Caught exception: #{$ERROR_INFO}"
end
exit
Jump to Line
Something went wrong with that request. Please try again.