「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」骑行川藏 题目描述 蛋蛋非常热衷于挑战自我,今年暑假他准备沿川藏线骑着自行车从成都前往拉萨. 川藏线的沿途有着非常美丽的风景,但在这一路上也有着很多的艰难险阻,路况变化多端,而蛋蛋的 ...
随机推荐
- EntityFramework更新数据
1.TryUpdateModel 使用很方便,但实际更新数据的过程还是先select,再update.另外发现一个问题,对于input的type类型file的字段,无法使用TryUpdateModel ...
- [LeetCode]题解(python):045-Jump game II
题目来源 https://leetcode.com/problems/jump-game-ii/ Given an array of non-negative integers, you are in ...
- iOS xib传值--定义方法传值
事件描述: 用xib创建了一个View,里面有按钮,有TableView.我需要将数据在初始化时传递进去,方便TableView来显示信息. 首先想到的是awakeFromNib这个方法(我以为是和V ...
- windows 访问 ubuntu虚拟机 django服务器 失败
配置ubuntu配置成桥接,在ubuntu虚拟机中运行django.py开发服务器.windows访问django失败. 虚拟机运行: python manage.py runserver 0.0.0 ...
- http文件的断点续传和下载
http://www.tuicool.com/articles/ZbyymqJ Content-Disposition:inline; filename= "c501b_01_h264_sd ...
- UVA 10127题目描述
Given any integer 0 ≤ n ≤ 10000 not divisibleby 2 or 5, some multiple of n is a number whichin decim ...
- ifconfig命令(转)
许多windows非常熟悉ipconfig命令行工具,它被用来获取网络接口配置信息并对此进行修改.Linux系统拥有一个类似的工具,也就是ifconfig(interfaces config).通常需 ...
- [BS-09] UITabBarController简单介绍
iOS开发UI篇—UITabBarController简单介绍 一.简单介绍 UITabBarController和UINavigationController类似,UITabBarControlle ...
- [转载]如何破解Excel VBA密码
原文链接:http://yhf8377.blog.163.com/blog/static/1768601772012102111032840/ 在此之前,先强调一下,这个方法只是用来破解Excel内部 ...
- iOS 隐藏系统的导航,使用自定义的导航
#import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDelegate> @pr ...