`
Hooopo
  • 浏览: 336164 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Image Magick学习笔记

    博客分类:
  • API
阅读更多
将图片灰度化(有利于让亮的部分更亮,暗的部分更暗,容易用程序算法来处理,一般灰度值=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
分享到:
评论
16 楼 Hooopo 2010-03-15  
http://www.luminous-landscape.com/tutorials/colour_theory.shtml
15 楼 Hooopo 2010-02-24  
14 楼 Hooopo 2010-01-12  
压缩&&去多余信息:
convert -quality 70% -strip a.jpg b.jpg
12 楼 Hooopo 2009-12-09  
引用
转换参数 -blur 和 -gaussian 有相同的参数:[半径]x[Sigma]。Sigma 值定义像素扩散的程度(看来起来更圆润),半径定义像素扩散的区域大小。
10 楼 Hooopo 2009-12-08  
herowzz 写道
有没有跟opencv的比较?这个东东做机器视觉可以不?

应该不可以,这个东东就是photoshop的命令行版本吧...图片处理的
9 楼 herowzz 2009-12-08  
有没有跟opencv的比较?这个东东做机器视觉可以不?
8 楼 Hooopo 2009-12-07  
CharlesCui 写道
我靠,你也搞这个?
这玩意在Mac的雪豹64上安装超级复杂,我一直没有安装成功!

难受死了.

是的,windows安装还算蛮顺利的。。。
我用来裁剪头像和加水印,你用来做什么?
7 楼 CharlesCui 2009-12-07  
我靠,你也搞这个?
这玩意在Mac的雪豹64上安装超级复杂,我一直没有安装成功!

难受死了.
6 楼 Hooopo 2009-12-07  
5 楼 Hooopo 2009-12-07  
此文档甚好!!http://www.imagemagick.org/Usage/thumbnails/#formats
4 楼 Hooopo 2009-12-07  
引用
你将会发现,大部分的操作,你只要在终端下动动键盘即可,省得你用鼠标点来点去。

下面,我对ImageMagick的主要功能做一个简单的介绍,其中覆盖的大都是人们常用的一些功能,如果你要全面的了解它的知识,你可以看看它的man手册。

convert
convert顾名思义就是对图像进行转化,它主要用来对图像进行格式的转化,同时还可以做缩放、剪切、模糊、反转等操作。

格式转化
比如把 foo.jpg 转化为 foo.png: 

convert foo.jpg foo.png
如果要想把目录下所有的jpg文件都转化为gif,我们可借助于shell的强大功能: 
find ./ -name "*.jpg" -exec convert {} {}.gif \;
转化后的gif名称为 *.jpg.gif ,这样看起来不太自然,没关系,我们可以再来一步: 
rename .jpg.gif .gif *.jpg.gif
本来,我想在find的时候,用basename来取得不带后缀的文件名的,这样就不会形成.jpg.gif这种丑陋的名子了,可是不知道为什么,就是不行,如果你知道的话,告诉我 
或者,你也可用shell script来完成上述的操作:

for i in *.jpgdoconvert $i `basename $i .jpg`.gifdone
我们还可用mogrify来完成同样的效果:

mogrify -format png *.jpg
上面命令将会把目录下面所有的jpg文件转化为png格式。 
convert还可以把多张照片转化成pdf格式:

convert *.jpg foo.pdf
大小缩放
比如我们要为一个普通大小的图片做一个缩略图,我们可以这样

convert -resize 100x100 foo.jpg thumbnail.jpg
你也可以用百分比,这样显的更为直观:
convert -resize 50%x50% foo.jpg thumbnail.jpg
convert会自动地考虑在缩放图像大小时图像的高宽的比例,也就是说着新的图像的高宽比与原图相同。 
我们还可以批量生成缩略图:

mogrify -sample 80x60 *.jpg
注意,这个命令会覆盖原来的图片,不过你可以在操作前,先把你的图片备份一下。 
加边框
在一张照片的四周加上边框,可以用 -mattecolor 参数,比如某位同志牺牲了,我们需要为他做一张黑边框的遗像,可以这样:

convert -mattecolor "#000000" -frame 60x60 yourname.jpg rememberyou.png
其中,"#000000"是边框的颜色,边框的大小为60x60 
你也可以这样加边框:

convert -border 60x60 -bordercolor "#000000" yourname.jpg rememberyou.png
在图片上加文字
convert -fill green -pointsize 40 -draw 'text 10,50 "charry.org"' foo.png bar.png
上面的命令在距离图片的左上角10x50的位置,用绿色的字写下charry.org,如果你要指定别的字体,可以用-font参数。 
模糊
高斯模糊:

convert -blur 80 foo.jpg foo.png
-blur参数还可以这样-blur 80x5。后面的那个5表示的是Sigma的值,这个是图像术语,我也不太清楚,总之,它的值对模糊的效果起关键的作用。 
翻转
上下翻转:

convert -flip foo.png bar.png
左右翻转:

convert -flop foo.png bar.png
反色
形成底片的样子:

convert -negate foo.png bar.png
单色
把图片变为黑白颜色:

convert -monochrome foo.png bar.png
加噪声
convert -noise 3 foo.png bar.png
油画效果
我们可用这个功能,把一张普通的图片,变成一张油画,效果非常的逼真

convert -paint 4 foo.png bar.png
旋转
把一张图片,旋转一定的角度:

convert -rotate 30 foo.png bar.png
上面的30,表示向右旋转30度,如果要向左旋转,度数就是负数。 
炭笔效果
convert -charcoal 2 foo.png bar.png
形成炭笔或者说是铅笔画的效果。 
散射
毛玻璃效果:

convert -spread 30 foo.png bar.png
漩涡
以图片的中心作为参照,把图片扭转,形成漩涡的效果:

convert -swirl 67 foo.png bar.png
凸起效果
用-raise来创建凸边:

convert -raise 5x5 foo.png bar.png
执行后,你会看到,照片的四周会一个5x5的边,如果你要一个凹下去的边,把-raise改为+raise就可以了。其实凸边和凹边看起来区别并不是很大。 
其他
其他功能都是不太常用的,如果你感兴趣的话,可以看它的联机文档

import
import是一个用于屏幕截图的组件,下面列出的是我们常用的功能,其他的功能,你参考它的man好了。

截取屏幕的任一矩形区域
import foo.png
在输入上述的命令后,你的鼠标会变成一个十字,这个时候,你只要在想要截取的地方划一个矩形就可以了 
截取程序的窗口
import -pause 3 -frame foo.png
回车后,用鼠标在你想截的窗口上点一下即可。参数- frame的作用是告诉import,截图的时候把目标窗口的外框架带上,参数-pause的作用很重要,你可以试着把它去掉,对比一下,你会发现,目标窗口的标题栏是灰色的,pause就是让import稍微延迟一下,等你的目标窗口获得焦点了,才开始截图,这样的图才比较自然。 
截取一个倾斜的窗口
如果想让你的截图比较cool,你可以把截取一个倾斜的窗口,方法如下:

import -rotate 30 -pause 3 -frame foo.png
截取整个屏幕
import -pause 3 -window root screen.png
注意,暂停了3秒钟,你需要在3秒钟内切换到需要截取的画面噢。 
display
display应该是我们***的最为频繁的图像处理软件了,毕竟,还是看的多

显示图片
display foo.png
如果你要显示多个文件,你可以***通配符
display *.png
幻灯片
display -delay 5 *
每隔5个百分之秒显示一张图片 
一些快捷键
space(空格): 显示下一张图片
backspace(回删键):显示上一张图片
h: 水平翻转
v: 垂直翻转
/:顺时针旋转90度
\:逆时针旋转90度
>: 放大
<: 缩小
F7:模糊图片
Alt+s:把图片中间的像素旋转
Ctrl+s:图象另存
Ctrl+d:删除图片
q: 退出
其他
ImageMagick还提供有丰富的编程接口,比如,你可以用php来调用它,用ImageMagick来生成验证码图片,效果非常棒。

ImageMagick还有一个小工具identify,它可以用来显示一个图片文件的详悉信息,比如格式、分辨率、大小、色深等等,你都可用它来帮你的忙。

如果你对命令行不太熟悉,你也可以在图片上单击,你会发现,通过鼠标你也可以完成图像的编辑。

ImageMagick的网站:www.imagemagick.org。这里是ImageMagick加工过的图片的例子。
3 楼 Hooopo 2009-12-07  
2 楼 Hooopo 2009-12-07  
Image Magick中文站:http://www.imagemagick.com.cn/
1 楼 yuan 2009-12-06  

相关推荐

    Image magick

    ImageMagick 是一个图象处理软件。它可以编辑、显示包括JPEG、TIFF、PNM、PNG、GIF和Photo CD在内的绝大多数当今最流行的图象格式。你可以改变图象尺寸、旋转、锐化等多种操作,功能强大

    Magick.NET类库,.net平台操作图片

    Magick.NET是一个强大的开源类库,专为.NET平台设计,用于处理和操作图像。这个类库使得.NET开发者能够轻松地进行各种复杂的图像处理任务,包括转换、裁剪、旋转、调整大小、添加特效以及应用滤镜等。Magick.NET不仅...

    php使用Image Magick将PDF文件转换为JPG文件的方法

    这是一个非常简单的格式转换代码,可以把.PDF文件转换为.JPG文件,代码要起作用,服务器必须要安装Image Magick 扩展。 $pdf_file = './pdf/demo.pdf'; $save_to = './jpg/demo.jpg'; //make sure that apache has ...

    Magick++ api文档

    例如,可以使用 `Magick::Image` 类的构造函数直接从文件、内存数据或空白图像创建一个新的图像对象。 2. **图像操作**: - **缩放**:`resize()` 方法允许用户调整图像的尺寸。 - **旋转**:`rotate()` 方法可以...

    Magick++实现图片压缩

    Magick::Image image("input.jpg"); image.setCompressionQuality(85); // 设置压缩质量为85 image.write("output.jpg"); // 写入压缩后的图像 ``` 除了压缩,Magick++还允许对图像进行锐化处理,以增强图像细节。...

    Magick++_tutorial.pdf

    在学习Magick++的过程中,用户需要按照文档的指导,逐步熟悉库的基本功能,包括加载和保存图像、修改图像属性、创建图像效果等。该教程通过逐步引导用户的方式,帮助他们理解Magick++图形库提供的各种方法和对象。 ...

    C# Magick.NET

    **C# Magick.NET 知识点详解** C# Magick.NET 是一个强大的图像处理库,专为C#开发者设计,提供了一整套API用于处理和操作各种图像格式。这个库允许开发者在C#环境中轻松地执行复杂的图像操作,如转换、裁剪、调整...

    Magick.NET图像操作库

    **Magick.NET 图像操作库** 是一个强大的跨平台库,专为.NET开发者设计,用于处理和操作图像。它提供了一套丰富的API,允许程序员在C#、VB.NET或其他支持.NET的语言中执行复杂的图像处理任务。Magick.NET库是基于...

    Magick++.cpp

    #include &lt;Magick++/Image.h&gt; #include &lt;Magick++/Drawable.h&gt; #include #include #define MAGICKCORE_QUANTUM_DEPTH 16 #define MAGICKCORE_HDRI_ENABLE 1 //#define _GLIBCXX_USE_CXX11_ABI 0L #define BI_RGB...

    image-resize-magick:借助magick调整图像大小的应用程序

    步骤 1 - 克隆存储库: 从命令行,克隆存储库: $ git clone https://github.com/bilgehanertan/image-resize-magick第 2 步 - 在 index.js 中更改所需的 3 个变量在 index.js 中,根据需要更改这些变量。...

    C# Magick.NET 7.4.3.0-Q8-AnyCPU

    《C#中的Magick.NET 7.4.3.0-Q8-AnyCPU:图像处理利器》 在C#编程领域,处理图像是一项常见的任务,而Magick.NET库为开发者提供了一个强大的工具集,用于执行各种图像操作。本文将深入探讨Magick.NET 7.4.3.0-Q8-...

    imagemagic.aspjzy.rar

    标题中的"imagemagic.aspjzy.rar...综上所述,"imagemagic.aspjzy.rar"压缩包可能是一个宝贵的资源,对于在中国使用或学习ImageMagick的人来说,无论是初学者还是经验丰富的开发者,都能从中获取有价值的指导和信息。

    Magick-Image-Reader:Visual Studio Code的扩展,它通过Magick.WASM集成了ImageMagick。 这提供了对在Visual Studio Code中查看100多种其他文件类型的支持。 [这是来自GitLab的镜像,请与那里的存储库进行交互。]

    Magick Image Reader是的扩展,它增加了对不离开应用程序的情况下读取支持。 它的主要用途是在管理映像存储库时快速访问映像,而无需离开Visual Studio代码或打开其他程序。 如果没有像和这样的免费和开源软件,这...

    c# magick.Net-7.4.3.0源码 source

    4. 扩展功能:Magick.NET还支持模糊、锐化、边框、蒙版等高级图像处理功能,源码中包含了这些功能的具体实现,开发者可以通过源码学习到如何实现这些效果。 三、实际应用 1. 图片比对:在版权保护、内容检测等领域...

    magick.zip

    "magick.zip" 文件可能包含了 ImageMagick 相关的资源或工具,ImageMagick 是一个功能强大的跨平台命令行工具集,用于处理各种图像格式。这个开源软件库支持读取、转换、编辑和显示超过一千种不同的图像文件格式。在...

    ImageMagick

    通过Image Magick/mogrify/GIMP/exiftool等工具来"convert"或"mogrify"图片,删除png图片中内嵌的iCCP profile sRGB: Image Magick使用举例: 删除单个png文件内的profile: % convert -strip &lt;input filename&gt; ...

    图像亮度变换

    通过学习这些资源,你可以进一步理解亮度变换的原理,并掌握如何在实际开发中应用这些技术。 总之,图像亮度变换是图像处理中的一个关键步骤,它可以改善图像的视觉效果,帮助突出细节,或适应不同的显示环境。通过...

    Magick 图片处理

    【标题】"Magick 图片处理"涉及到的核心技术是ImageMagick,这是一款开源的跨平台图像处理工具,用于在命令行中进行各种图像操作,包括但不限于图片转换、编辑、合成以及添加水印等。ImageMagick的强大功能使得它在...

    BatchResize:Image Magick的前端可以尽快调整图像大小-开源

    这意味着用户不仅可以免费使用BatchResize,还可以查看源代码、学习其工作原理,并根据需要对其进行修改和定制,只要保持开源性质即可。 **BatchResize的功能特性** 1. **批量处理**:用户可以选择一个目录或多个...

Global site tag (gtag.js) - Google Analytics