我的开发平台:winXP系统 + sp2, ruby 1.8.5,Rails 1.2.3,mysql5.0.27, RMagick-1.14.1_IM-6.3.0-7-Q8.当然,以上的开发软件都是windows版的。
RMagick的使用经验
这里需要说明的是:我并不打算做一个RMagick的使用大全,而只是结合我的使用经验对一些不太容易注意到的问题进行总结。
RMagick的API可以参考
www.gotapi.comRMagick的使用:
1. 安装配置
在RMagick安装前,确保你的系统正确安装了ruby和rails。RMagick的 安装配置很简单:下载安装文件,解压缩后,在命令行状态下进入解压缩后的目录 ,找到RMagick的gem,如rmagick-1.14.1-win32.gem,然后命令行执行:gem rmagick-1.14.1-win32.gem,然后双击ImageMagick-6.3.0-7-Q8-windows-dll.exe进行安装, 只需要根据个人情况改变安装路径即可 。这部分内容有很多文章都有过详细的介绍,还有不明白的可以搜一下。
2. RMagick的基本使用
(1)定义主要对象使用RMagick,重要会用到两个对象:Image和Draw。这两个对象可以形象的理解为:Image对象相当于画布,Draw对象相当于画笔。
为方便以下说明,我这样定义这两个对象:
ruby 代码
-
require‘rmagick’//千万别忘了在文件开头加上这段代码
-
canvas=Magick::Image.new(width,height,Magick::HatchFill.new(bg_color,bg_color))
- gc=Magick::Draw.new
参数说明:Image对象定义的前两个参数是定义图片的宽和高,后门一个定义图片的背景(可选),默认为白色。
要读取一个存在的图片,Image对象还有如下定义方式:
ruby 代码
-
img=Magick::Image.read(image_path).first//image_path是字符串形式的图片路径
- Image对象定义后,根据img.rows和img.columns可以获得它的高度和宽度。
(2)对象使用方法gc对象的主要功能有:在图片上写字,在图片上画线,把另一张图片组合到当前图片上。下面我主要说两个问题:
在图片上写中文:
主要有两个方法gc.text,gc.annotate 相关参数可以在gotapi上轻松查到。用这两个方法写系统自带的英文字体是非常方便的,gc.font,gc.font_family可以设置字体,还 可以通过gc. font_style, gc.font_weight来设置斜体和粗体,它们的参数是类似Magick::ItalicStyle、Magick::NormalStyle、 Magick::BoldWeight、Magick::LighterWeight这样的常量。当然还有gc.pointsize来设置字体大小,这个 对于中英文是通用的。
我这里主要对写中文字体做一些介绍。由于RMagick对中文支持不好,当时使用它写中文的时候默认情况下只发现了黑体可以使用(当然是在我的 windows平台下)。因为我们图片处理需要提供多种字体来写字,还考虑到发布环境在linux下,所以我们用了这样的方法:从Windows的字体文 件夹c:/windows/fonts下拷贝出中文字体库到自己的工程目录中,然后通过设置gc.font来使用它们。下面是我的例子:
ruby 代码
-
require'RMagick'
-
-
img=Magick::Image.new(200,200,Magick::HatchFill.new('green','green'))
-
-
gc=Magick::Draw.new
-
gc.stroke('transparent')
-
gc.pointsize(24)
-
gc.font("fonts/STCAIYUN.TTF")
-
gc.text(20,40,'我爱你啊')
-
-
gc.font("fonts/STXINWEI.TTF")
-
gc.text(20,70,'我爱你啊')
-
-
gc.fill('white')
-
gc.font("fonts/FZSTK.TTF")
-
gc.text(20,100,'我爱你啊')
-
-
gc.font("fonts/simhei.ttf")
-
gc.text(20,130,'我爱你啊')
-
-
gc.font("fonts/yihejianti.TTF")
-
gc.text(20,160,'我爱你啊')
-
-
gc.draw(img)
- img.write('love.jpg')
说明:如果你想保存并运行这段代码,请保存为
UTF-8的格式,否则会乱码,还要保证你当前文件的fonts目录下有这些ttf字库文件。
这里还要强调的是,在写字的时候一定要设置gc.stroke('transparent')。尽管gc.stroke最开始默认的是 transparent,但我还是建议在每次写字之前设置一次,否则如果在之前使用过gc.stroke并且设置了非transparent的值,那么写 出来的字会是下面这样的(我把transparent换成了red)
附件图片love2.jpg当然,如果你想要达到这种效果则另当别论了。如果你想要写出更多的中文字体,那就去下载更多的字体库就可以了,是不是很简单?
我现在还有一个问题没有解决:不知道哪里可以下载中文字体的粗体斜体字库(如黑体,宋体,隶书、楷体等),麻烦知道的朋友告之,我的邮箱zhangxiaoyao067, gmail.com
继续罗嗦一点:对字体的设置有gc.font(ttf_file)和gc.font=ttf_file这两种方式,它们的区别在什么地方呢?还是用上面那 个例子来说明。如果其中所有的gc.font(ttf_file)换成gc.font=ttf_file,那么最后的结果会是
附件图片love3.jpg看明白了吧?也就是用“=”的时候,只有最后一个起作用。
图片裁剪:还是用代码来说明吧
ruby 代码
-
gc.define_clip_path('clip_pic'){
-
gc.stroke_width(0)
-
gc.rectangle(lefttop_x,lefttop_y,rightbottom_x,rightbottom_y)}
-
gc.push
-
gc.clip_path('clip_pic')
-
gc.composite(x,y,width,height,Magick::Image.read(myImageUrl))
- gc.pop
说明:首先要定义一个裁剪区域,这里我定义了一个矩形区域,然后是应用。只有在裁剪区域内部的图片才会画到画布上面。这里要注意的是gc.push, gc.pop,因为gc.clip_path的裁剪会应用在gc的整个存活期内部,因此gc.draw的所有内容都会限制在这个裁剪区域内部。这两个操作 相当于对裁剪应用的释放。
分享到:
相关推荐
安装redmine-3.2.3 ruby on rails 下的插件 rmagick 2.16.0 gem
rails 插件rmagick 2.10.0 gem
使用Rails构建可伸缩和可维护API的最佳方法
rails, Ruby on Rails 欢迎使用 RailsRails 是一个web应用程序框架,它包括根据 Model-View-Controller ( MVC ) Pattern 创建数据库备份的web应用程序所需的所有内容。理解 MVC Pattern 是理解 Rai
ruby on rails轻松使用
NULL 博文链接:https://hlee.iteye.com/blog/587000
bower-rails, 在 Rails 上,为 Bower 设置类似 DSL + rake任务 rails Bower 对 Rails 项目的支持。 依赖文件是 Rails root 目录中的bower.json,如果使用 DSL,则为 Bowerfile 。 查看最新变更和发布的变更日志文件...
shoppe-example, 在 Rails 中使用Shoppe平台的示例存储实现 这是一个 Rails 应用程序,它使用 Shoppe 构建。 它具有一个可以爱的设计,以充分演示Shoppe平台提供的功能以及它在 Rails 应用程序中的。 正在启动要开始...
Ruby on Rails轻松使用,掌握最新最热门的技术
此外,在Ruby on Rails上使用它也是非常的简单。 如何使用: 对于在Rails上使用Redis Store,首先我们需要在Gemfile文件中添加入口 gem 'redis-rails' gem 'redis-rack-cache' # optional 然后我们就会有...
使用Aptana+Rails开发Rails Web应用 有Aptana的安装配置等等,中文
rails-settings, 使用 Ruby on Rails 管理设置 Rails的设置 ruby gem,通过在单独的数据库表中将它们存储为序列化的哈希来处理。 包含命名空间和默认值。要求ruby 1.9.3或者更高版本Rails 3.1或者更高版本( 包括 ...
使用RSpec 测试Rails 程序.pdf
rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails ...
在过去的几年中,《Ruby on Rails Tutorial》这本书被视为介绍使用 Rails 进行 Web 开发的先驱者。 在这个全球互联的世界中,计算机编程和 Web 应用程序开发都在迅猛发展,我很期待能为中国的开发者提供 Ruby on ...
jquery-datatables-rails, 用于 Rails的jquery数据表 gem jquery-datatables-rails 这个 gem 为 jQuery DataTables插件提供了方便,以便与 Rails 资产pipleine结合使用。 它提供所有基本的datatable文件,以及一些...
博文链接:https://ziyoujiedao.iteye.com/blog/148307
《Rails之道》按照Rails的各个子系统进行组织编排,分别介绍了Rails的环境、初始过程、配置和日志记录,Rails的分配器、控制器... 《Rails之道》是Rails的权威参考书,适合对Rails已经有一定了解的开发人员学习和使用。
[Pragmatic Bookshelf] Crafting Rails Applications Expert Practices for Everyday Rails Development (E-Book) ☆ 图书概要:☆ Rails 3 is a huge step forward. You can now easily extend the framework, ...
GraphQL API的Rails样式结构。 安装 将此行添加到您的应用程序的Gemfile中: gem 'graphql_rails' 然后执行: $ bundle 或自己安装为: $ gem install graphql_rails 入门 执行: $ bundle exec rails g ...