Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

executable file 325 lines (258 sloc) 9.144 kB
#!/usr/local/bin/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("images/model.miff")
model.border_color = "black"
model.background_color = "black"
model.cur_image[:Label] = "RMagick"
smile = ImageList.new("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") {
self.pointsize = 18;
self.font = Font;
self.stroke = "gold"
self.fill = "gold"
self.gravity = NorthGravity
}
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") {
self.size = Geometry.new(model.columns, model.rows)
}
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") {
self.size = Geometry.new(model.columns, model.rows)
}
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 {
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"
}
# 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 then
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 = RunlengthEncodedCompression
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: #{$!}"
end
exit
Jump to Line
Something went wrong with that request. Please try again.