安装rmagick gem

A new release 2.13.2 of RMagick is now available on github as well as rubygems.
This release will fix the installation issues due to ruby 1.9.3 and ImageMagick 6.8+. You can install it the usual way with bundle by adding to Gemfile:
gem 'rmagick', '2.13.2'
or if you want to be on edge:
gem 'rmagick', '2.13.2', :git=>'http://github.com/rmagick/rmagick.git'
You also install it directly by doing:
gem install rmagick

RMagick的基本使用

(1)定义主要对象

使用RMagick,重要会用到两个对象:Image和Draw。

  1. require 'rubygems'
  2. require 'RMagick'
  3. img =  Magick::Image.read('image/rails.png').first
  4. width = img.columns
  5. height = img.rows
  6. thumb = img.resize(width * 0.8, height * 0.8)
  7. thumb.write('image/rails_thumb_1.png') {self.quality = 50} #compress压缩大小
    1. require 'rubygems'
    2. require 'RMagick'
    3. img =  Magick::Image.read('image/rails.png').first #Image.read返回一个数组(因为有时候我们会read一个GIF动画,那么GIF动画的每一帧会存到这个数组里,真是周到)
    4. width, height = 100, 100
    5. thumb = img.resize(width, height)
    6. thumb.write('image/rails_thumb.png')

给图片加水印(中文的)

首先给文件增加必要的gem引入

require 'rubygems'
require 'RMagick'

给图片嵌入中文文字

def t1
  img=Magick::Image.read('path\read_image1.jpg').first #图片路径,用相对路径即可,相对于public来说的
  my_text="\251 这是黑马的标致"
  copyright=Magick::Draw.new
  copyright.annotate(img,0,0,3,18,my_text) do #可设字的位置
    self.gravity = Magick::CenterGravity
    self.font='public\images\simsun.ttc' #这地方必须使用中文字库,才能打中文到图片上。在windows中c:\windows\fonts\simsun.ttc拷到项目的public\images目录下就可以随着项目使用了。另外注意:笔者是使用utf-8字符集来编辑源文件的,如果你不是,请在程序中对汉字转换编码为utf-8
    self.pointsize=96 #字体大小
    self.font_weight=Magick::BoldWeight
    self.fill='red' #字的颜色
    self.gravity=Magick::SouthEastGravity
    self.stroke = "none"
  end
  img=img.raise #浮雕效果
  img.write('path\img')
end
def test_photo
  img=Magick::Image.read('public\photo\big_image\1\1119218437.jpg').first
  img2=Magick::Image.read('public\photo\big_image\2\DSCN4991-thumb.jpg').first #版权图片
  my_text="\251 黑马的标致"
  img.composite!(img2, -0,-0, Magick::CopyCompositeOp) #图片叠加 ,CopyCompositeOp是composite的运算之一,还有很多运算方法,实现各种效果,可以在官网找到 http://www.imagemagick.org/RMagick/doc/constants.html#CompositeOperator
  copyright=Magick::Draw.new
  copyright.annotate(img,0,0,3,18,my_text) do #可设字的位置
    self.gravity = Magick::CenterGravity
    self.font='public\images\simsun.ttc'
    self.pointsize=96 #字体大小
    self.font_weight=Magick::BoldWeight
    self.fill='red' #字的颜色
    self.gravity=Magick::SouthEastGravity
    self.stroke = "none"
  end
  img=img.raise #浮雕效果
  mark.rotate!(-90) #可旋转
  img = img.watermark(mark, 0.15, 0, Magick::EastGravity) #0.15是透明度
  img.write('public\photo\big_image\1\1119218437-image1_bak.jpg')
end

文字特效

Rows = 60
Cols = 250
Text = 'Ruby rocks!'
anim = Magick::ImageList.new
ex = Magick::Image.new(Cols, Rows)
text = Magick::Draw.new
text.gravity = Magick::CenterGravity
text.pointsize = 36
text.font_weight = Magick::BoldWeight
text.font_style = Magick::ItalicStyle
text.stroke = 'transparent'
text.annotate(ex, 0, 0, 2, 2, Text) {
  self.fill = 'gray60'
}
anim << ex.copy
ex = ex.blur_image(0, 3)
anim << ex.copy
text.annotate(ex, 0, 0, -1, -1, Text) {
  self.fill = 'maroon'
}
anim << ex.copy
anim.delay = 100
anim.cur_image.delay = 300
anim.iterations = 0
anim.write('shadow.gif')
exit

缩略图

[1] pry(main)> require "RMagick"
# => true
[2] pry(main)> img=Magick::Image.read('pic7.jpg').first
# => pic7.jpg JPEG 600x800 600x800+0+0 DirectClass 8-bit 121kb
[3] pry(main)> c,r=img.columns,img.rows
# => [600, 800]
[4] pry(main)> l=c>r ? c : r
# => 800
[5] pry(main)> f=640.0/l
# => 0.8
[6] pry(main)> t1=img.thumbnail(f)
# => pic7.jpg JPEG 600x800=>480x640 DirectClass 8-bit
[7] pry(main)> t1.write('t1.jpg')
# => pic7.jpg=>t1.jpg JPEG 600x800=>480x640 DirectClass 8-bit 84kb
[8] pry(main)> img=nil
# => nil

「ruby」使用rmagick处理图像的更多相关文章

  1. 「ruby/MiniMagick」用MiniMagick处理图片

    包的选择和配置 想用RMagick,但据说内存泄露的问题比较厉害,作为替代品MiniMagick不存在内存泄露的问题.而二者都是使用ImageMagick的,所以需要下载并安装ImageMagick. ...

  2. 一个只需要点 「下一步」就完成监控 Windows

    Cloud Insight 此前已然支持 Linux 操作系统,支持20多中数据库中间件等组件,多种操作,多种搭配,服务器监控玩的其乐无穷啊!但想想还有许多 Windows 的小伙伴没有体验过,所以在 ...

  3. 不设目标也能通关「马里奥」的AI算法,全靠好奇心学习

    在强化学习中,设计密集.定义良好的外部奖励是很困难的,并且通常不可扩展.通常增加内部奖励可以作为对此限制的补偿,OpenAI.CMU 在本研究中更近一步,提出了完全靠内部奖励即好奇心来训练智能体的方法 ...

  4. 「案例」让房东在 Airbnb 上展示他们的热情好客

    如何才能让房东准确的描述自己的房源,如何才能让房东充分的展示自己的房源.Airbnb 在这次更新里尝试去解决了这两个问题,让我们跟随作者的文笔去了解一下整个项目的经过. 关于本文 原文作者:Cecil ...

  5. 「翻译」Unity中的AssetBundle详解(一)

    AssetBundles AssetBundle是一个存档文件,其中包含平台在运行时加载的特定资产(模型,纹理,预制,音频剪辑,甚至整个场景).AssetBundles可以表示彼此之间的依赖关系;例如 ...

  6. 「Azure」数据分析师有理由爱Azure之一-Azure能带给我们什么?

    前面我们以相同的方式从数据分析师的视角介绍了Sqlserver,本系列亦同样地延续下去,同样是挖掘数据分析师值得使用的Azure云平台的功能.因云平台功能太多,笔者所接触的面也十分有限,有更专业的读者 ...

  7. 2019 年在 Raspberry Pi 「树莓派」上运行的 10 个操作系统推荐

    原文:2019 年在 Raspberry Pi 「树莓派」上运行的 10 个操作系统推荐 image Raspberry Pi** 是一款基于 ARM 的单板计算机,默认运行一款称为 Raspbian ...

  8. 「APIO2016」烟花表演

    「APIO2016」烟花表演 解题思路 又是一道 solpe trick 题,观察出图像变化后不找一些性质还是挺难做的. 首先令 \(dp[u][i]\) 为节点 \(u\) 极其子树所有叶子到 \( ...

  9. 「NOI2012」骑行川藏

    「NOI2012」骑行川藏 题目描述 蛋蛋非常热衷于挑战自我,今年暑假他准备沿川藏线骑着自行车从成都前往拉萨. 川藏线的沿途有着非常美丽的风景,但在这一路上也有着很多的艰难险阻,路况变化多端,而蛋蛋的 ...

随机推荐

  1. Linux centos关机与重启命令详解与实战

    Linux centos重启命令: 1.reboot 2.shutdown -r now 立刻重启(root用户使用) 3.shutdown -r 10 过10分钟自动重启(root用户使用) 4.s ...

  2. 关于Xib 需要注意的地方

    当你需要写一个繁琐的界面但是又是静态页面时,很可能会用到xib [特例:创建继承于UIView的文件时,不带自动生成xib的勾选项,需要开发人员手动new一个同名的xib文件,在该xib文件右侧的cl ...

  3. UITabBar 设置字体的颜色(选中状态/正常状态)setTitleTextAttributes

    UITabbar有个setTintColor这个方法,可以理解为,高亮的时候,或者点击后的颜色设置. UITabBarItem有个setTitleTextAttributes的方法,是用来设置字体的颜 ...

  4. Ⅰ.net通信指前提

    ①大概搜索了一下,一般提到了这三种居多: Webservice:基于B/S的,可以对外发布方法 Socket:一种网络数据交换模型,Socket接口是TCP/IP网络的API,有三个主要因素:地址.端 ...

  5. table表格某一td内容太多导致样式混乱的解决方案

    对于有很多条目的数据,通常采用table元素来快速实现,某一个td的内容太多的话就会导致样式混乱难看. 解决方案 要让table的宽度固定可以给table元素设置table-layout:fixed; ...

  6. 《JAVA NIO》第二章缓冲区

    1.缓冲区的构成 2.缓冲区的类图 3.ByteBuffer ByteBuffer是直接和Channel打交道的,准确的是直接字节缓冲. 问题:直接字节缓冲区和内存映射的关系 4.ByteOrder ...

  7. iOS7跳转AppStore地址

    跳转AppStore地址改变: 由 itms-apps://ax.itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews? ...

  8. iOS ASIHTTPRequest 请求https

    iOS 终端请求服务端数据时,为了保证数据安全,我们一般会使用https协议加密,而对于iOS的网络编程,我们一般会使用开源框架:ASIHTTPRequest,但是如果使用传统的http方式,即使忽略 ...

  9. Interview Return Products of All Other Elements in Array

    这是一道面试亚马逊时的题目,要求Time O(n). 我刚开始想的是算出所有的数的总product,再去除以对应位置的元素,但这种做法的问题是若该位置为0,就会报错. 到网上搜了下,才知道,原来有这种 ...

  10. The command 'new_value' for SQLPlus

    Format: column column_name new_value var_name Meaning: use the column_name of a select statment to c ...