我的开发平台: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.com
RMagick的使用:
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')
运行结果:
附件图片love1.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的所有内容都会限制在这个裁剪区域内部。这两个操作相当于对裁剪应用的释放。
ok,暂时写这么多吧.
我们的网站:
www.youqubar.com ,欢迎指导。
- 大小: 19 KB
- 大小: 19.2 KB
- 大小: 20 KB
分享到:
- 2007-09-19 22:20
- 浏览 5086
- 评论(7)
- 论坛回复 / 浏览 (5 / 8676)
- 查看更多
相关推荐
rails 插件rmagick 2.10.0 gem
安装redmine-3.2.3 ruby on rails 下的插件 rmagick 2.16.0 gem
使用Rails构建可伸缩和可维护API的最佳方法
bower-rails, 在 Rails 上,为 Bower 设置类似 DSL + rake任务 rails Bower 对 Rails 项目的支持。 依赖文件是 Rails root 目录中的bower.json,如果使用 DSL,则为 Bowerfile 。 查看最新变更和发布的变更日志文件...
rails-settings, 使用 Ruby on Rails 管理设置 Rails的设置 ruby gem,通过在单独的数据库表中将它们存储为序列化的哈希来处理。 包含命名空间和默认值。要求ruby 1.9.3或者更高版本Rails 3.1或者更高版本( 包括 ...
rails, Ruby on Rails 欢迎使用 RailsRails 是一个web应用程序框架,它包括根据 Model-View-Controller ( MVC ) Pattern 创建数据库备份的web应用程序所需的所有内容。理解 MVC Pattern 是理解 Rai
使用Aptana+Rails开发Rails Web应用 有Aptana的安装配置等等,中文
使用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 ...
NULL 博文链接:https://hlee.iteye.com/blog/587000
在过去的几年中,《Ruby on Rails Tutorial》这本书被视为介绍使用 Rails 进行 Web 开发的先驱者。 在这个全球互联的世界中,计算机编程和 Web 应用程序开发都在迅猛发展,我很期待能为中国的开发者提供 Ruby on ...
《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, ...
dckerize, 使用 Docker 容器的增压 Rails 开发 Dckerize 使用 Docker的增压 Rails 开发描述这个 gem 为你提供了一个很好的起始点,可以使用 Docker 对 Rails 5应用程序进行 containerize 。你会得到用于应用程序和...
本书教您如何使用Ruby on Rails开发和部署真正的,具有工业实力的Web应用程序,Ruby on Rails是为诸如Twitter,Hulu,GitHub和Yellow Pages等顶级网站提供支持的开源Web框架。
Ruby on Rails Guides v2 - Ruby on Rails 4.2.5
rails-stripe-checkout, Rails 5.0启动使用条纹检验产品的应用程序 Rails 条纹签出Rails 示例应用程序演示了如何使用条纹结帐工具销售一个产品。 使用这里示例应用程序作为你自己的网络应用程序的入门应用程序。有关...
使用引导模式运行的 Rails 4 应用程序! 这个应用程序展示了如何在 rails 4 中使用模态请参阅 users/index.html.erb 中的 Users#Show 按钮
ruby on rails轻松使用
shoppe-example, 在 Rails 中使用Shoppe平台的示例存储实现 这是一个 Rails 应用程序,它使用 Shoppe 构建。 它具有一个可以爱的设计,以充分演示Shoppe平台提供的功能以及它在 Rails 应用程序中的。 正在启动要开始...