Image Magick学习笔记

将图片灰度化(有利于让亮的部分更亮,暗的部分更暗,容易用程序算法来处理,一般灰度值=0.3R+0.59G+0.11B)
convert  in.jpg -colorspace GRAY  out.jpg


将片灰度反转

convert -negate in.jpg out.jpg


demo

#!/home/software/ruby-1.8.4/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


http://security.ctocio.com.cn/securitycomment/111/8706611.shtml
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值