安装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. EntityFramework更新数据

    1.TryUpdateModel 使用很方便,但实际更新数据的过程还是先select,再update.另外发现一个问题,对于input的type类型file的字段,无法使用TryUpdateModel ...

  2. [LeetCode]题解(python):045-Jump game II

    题目来源 https://leetcode.com/problems/jump-game-ii/ Given an array of non-negative integers, you are in ...

  3. iOS xib传值--定义方法传值

    事件描述: 用xib创建了一个View,里面有按钮,有TableView.我需要将数据在初始化时传递进去,方便TableView来显示信息. 首先想到的是awakeFromNib这个方法(我以为是和V ...

  4. windows 访问 ubuntu虚拟机 django服务器 失败

    配置ubuntu配置成桥接,在ubuntu虚拟机中运行django.py开发服务器.windows访问django失败. 虚拟机运行: python manage.py runserver 0.0.0 ...

  5. http文件的断点续传和下载

    http://www.tuicool.com/articles/ZbyymqJ Content-Disposition:inline; filename= "c501b_01_h264_sd ...

  6. UVA 10127题目描述

    Given any integer 0 ≤ n ≤ 10000 not divisibleby 2 or 5, some multiple of n is a number whichin decim ...

  7. ifconfig命令(转)

    许多windows非常熟悉ipconfig命令行工具,它被用来获取网络接口配置信息并对此进行修改.Linux系统拥有一个类似的工具,也就是ifconfig(interfaces config).通常需 ...

  8. [BS-09] UITabBarController简单介绍

    iOS开发UI篇—UITabBarController简单介绍 一.简单介绍 UITabBarController和UINavigationController类似,UITabBarControlle ...

  9. [转载]如何破解Excel VBA密码

    原文链接:http://yhf8377.blog.163.com/blog/static/1768601772012102111032840/ 在此之前,先强调一下,这个方法只是用来破解Excel内部 ...

  10. iOS 隐藏系统的导航,使用自定义的导航

    #import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDelegate> @pr ...