「ruby」使用rmagick处理图像
安装rmagick gem
A new release 2.13.2 of RMagick is now available on github as well as rubygems. 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。
- require 'rubygems'
- require 'RMagick'
- img = Magick::Image.read('image/rails.png').first
- width = img.columns
- height = img.rows
- thumb = img.resize(width * 0.8, height * 0.8)
- thumb.write('image/rails_thumb_1.png') {self.quality = 50} #compress压缩大小
- require 'rubygems'
- require 'RMagick'
- img = Magick::Image.read('image/rails.png').first #Image.read返回一个数组(因为有时候我们会read一个GIF动画,那么GIF动画的每一帧会存到这个数组里,真是周到)
- width, height = 100, 100
- thumb = img.resize(width, height)
- 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处理图像的更多相关文章
- 「ruby/MiniMagick」用MiniMagick处理图片
包的选择和配置 想用RMagick,但据说内存泄露的问题比较厉害,作为替代品MiniMagick不存在内存泄露的问题.而二者都是使用ImageMagick的,所以需要下载并安装ImageMagick. ...
- 一个只需要点 「下一步」就完成监控 Windows
Cloud Insight 此前已然支持 Linux 操作系统,支持20多中数据库中间件等组件,多种操作,多种搭配,服务器监控玩的其乐无穷啊!但想想还有许多 Windows 的小伙伴没有体验过,所以在 ...
- 不设目标也能通关「马里奥」的AI算法,全靠好奇心学习
在强化学习中,设计密集.定义良好的外部奖励是很困难的,并且通常不可扩展.通常增加内部奖励可以作为对此限制的补偿,OpenAI.CMU 在本研究中更近一步,提出了完全靠内部奖励即好奇心来训练智能体的方法 ...
- 「案例」让房东在 Airbnb 上展示他们的热情好客
如何才能让房东准确的描述自己的房源,如何才能让房东充分的展示自己的房源.Airbnb 在这次更新里尝试去解决了这两个问题,让我们跟随作者的文笔去了解一下整个项目的经过. 关于本文 原文作者:Cecil ...
- 「翻译」Unity中的AssetBundle详解(一)
AssetBundles AssetBundle是一个存档文件,其中包含平台在运行时加载的特定资产(模型,纹理,预制,音频剪辑,甚至整个场景).AssetBundles可以表示彼此之间的依赖关系;例如 ...
- 「Azure」数据分析师有理由爱Azure之一-Azure能带给我们什么?
前面我们以相同的方式从数据分析师的视角介绍了Sqlserver,本系列亦同样地延续下去,同样是挖掘数据分析师值得使用的Azure云平台的功能.因云平台功能太多,笔者所接触的面也十分有限,有更专业的读者 ...
- 2019 年在 Raspberry Pi 「树莓派」上运行的 10 个操作系统推荐
原文:2019 年在 Raspberry Pi 「树莓派」上运行的 10 个操作系统推荐 image Raspberry Pi** 是一款基于 ARM 的单板计算机,默认运行一款称为 Raspbian ...
- 「APIO2016」烟花表演
「APIO2016」烟花表演 解题思路 又是一道 solpe trick 题,观察出图像变化后不找一些性质还是挺难做的. 首先令 \(dp[u][i]\) 为节点 \(u\) 极其子树所有叶子到 \( ...
- 「NOI2012」骑行川藏
「NOI2012」骑行川藏 题目描述 蛋蛋非常热衷于挑战自我,今年暑假他准备沿川藏线骑着自行车从成都前往拉萨. 川藏线的沿途有着非常美丽的风景,但在这一路上也有着很多的艰难险阻,路况变化多端,而蛋蛋的 ...
随机推荐
- JS实现页面回到顶部效果
[代码] <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- JS判断浏览器是否安装flash插件
1.直接判断是否有flash插件 var myFlash = (function(){ if(typeof window.ActiveXObject != "undefined") ...
- mongoDB命令
. getLastError db.runCommand({getLastError:}) . buildInfo //返回mongoDB的服务器版本号和操作系统类型 db.runCommand({} ...
- 【转】Android各种Adapter的用法
转自:http://my.oschina.net/u/658933/blog/372151 Android各种Adapter的用法 发表于5个月前(2015-01-27 10:56) 阅读(143 ...
- C# BeginInvoke
在用C#编写串口助手时,希望创建线程更新UI,网上有人采用BeginInvoke方法, 这里记录一下使用方法. 参考链接: http://blog.csdn.net/zaijzhgh/article/ ...
- shell自动计算脚本
shell自动计算脚本 #!/bin/bash echo $(($)) [root@bogon ~]# sh b.sh 123+123246 let用户声明这个操作是要计算,后者的效率更高 (expr ...
- 前端学习——css实用技术
一,css控制文本样式 文本相关的css属性有很多,包括: color;font-size;font-weight;text-transform(大小写uppercase等);text-decorat ...
- HTML-移动端如何使用css让百分比布局的弹窗水平和垂直方向上居中
pc端让一个弹窗水平和垂直方向居中,在知道弹窗宽高的情况下很好计算,只需要用如下css即可: #date{ width: 300px; height: 300px; position: absolut ...
- MVC4之ModelBinder-模型绑定
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 最近在做自学MVC,遇到的问题很多,索性一点点总结 ...
- v$osstat
SQL> select * from v$osstat; STAT_NAME VALUE OSSTAT_ID COMMENTS CUM ----------------------------- ...