Rails上使用RMagick经验之谈

原创 2007年09月20日 17:16:00
我的开发平台: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 代码
 
  1. require ‘rmagick’ //千万别忘了在文件开头加上这段代码  
  2. canvas = Magick::Image.new(width,height,Magick::HatchFill.new(bg_color,bg_color))  
  3. gc = Magick::Draw.new  

参数说明:Image对象定义的前两个参数是定义图片的宽和高,后门一个定义图片的背景(可选),默认为白色。
要读取一个存在的图片,Image对象还有如下定义方式:
ruby 代码
  1. img=Magick::Image.read(image_path).first  //image_path是字符串形式的图片路径  
  2. 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 代码
 
  1. require 'RMagick'  
  2.   
  3. img = Magick::Image.new(200,200,Magick::HatchFill.new('green','green'))  
  4.   
  5. gc = Magick::Draw.new  
  6. gc.stroke('transparent')  
  7. gc.pointsize(24)  
  8. gc.font("fonts/STCAIYUN.TTF")  
  9. gc.text(20,40, '我爱你啊')  
  10.   
  11. gc.font("fonts/STXINWEI.TTF")  
  12. gc.text(20,70, '我爱你啊')  
  13.   
  14. gc.fill('white')  
  15. gc.font("fonts/FZSTK.TTF")  
  16. gc.text(20,100, '我爱你啊')  
  17.   
  18. gc.font("fonts/simhei.ttf")  
  19. gc.text(20,130, '我爱你啊')  
  20.   
  21. gc.font("fonts/yihejianti.TTF")  
  22. gc.text(20,160, '我爱你啊')  
  23.   
  24. gc.draw(img)  
  25. 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 代码
  1. gc.define_clip_path('clip_pic'){  
  2.               gc.stroke_width(0)  
  3.               gc.rectangle(lefttop_x,lefttop_y,rightbottom_x,rightbottom_y)}         
  4. gc.push  
  5. gc.clip_path('clip_pic')  
  6. gc.composite(x, y, width, height,Magick::Image.read(myImageUrl))  
  7. gc.pop  

说明:首先要定义一个裁剪区域,这里我定义了一个矩形区域,然后是应用。只有在裁剪区域内部的图片才会画到画布上面。这里要注意的是gc.push, gc.pop,因为gc.clip_path的裁剪会应用在gc的整个存活期内部,因此gc.draw的所有内容都会限制在这个裁剪区域内部。这两个操作 相当于对裁剪应用的释放。
ok,暂时写这么多吧.
我们的网站:www.youqubar.com ,欢迎指导。

唉,不会发图,原帖链接http://www.javaeye.com/topic/125487
 

Rmagick安装

windows7rails3.1下Rmagick安装(brown) 2011-11-29 09:54 308人阅读 评论(0) 收藏 举报 使用RailsInstaller升级到Ru...
  • xzyxuanyuan
  • xzyxuanyuan
  • 2013年01月30日 11:24
  • 3251

安装RMagick遇到的问题及解决办法

 今天为两台机器192.168.100 .231 CentOS release 3.6 (Final)192.168.100.234   CentOS release 4.3 (Final)安装Rma...
  • pwlazy
  • pwlazy
  • 2007年12月01日 16:10
  • 3672

Linux ImageMagick 转换图片格式工具

    前面在一个项目开发中用到了ImageMagick,我们自己的测试环境都正常,然后就按照我们开发环境的安装方法安装了客户的测试环境,但在处理jpeg类型图片的时候报错了。回头一看配置log,居然...
  • chengfei112233
  • chengfei112233
  • 2010年12月22日 17:11
  • 3359

rails插件file_column以及rmagick的使用

在网站制作过程中,图片上传以及图片的大小调整是经常会用到的一个功能!Rails结合几个plug-in可以说很智能的做到了这一点做了一个简单的例子,系统在Windows平台上运行1.上网下载file-c...
  • woowindice
  • woowindice
  • 2006年11月10日 09:05
  • 2128

MacOS下gem安装rmagick的蛋疼经历

在ubuntu下安装貌似很容易安装对应的dev包就可以了,但是mac下用brew貌似找不到神马dev包可用,不过没关系,找dev的目的就是找到对应的头文件,brew安装包的源代码可以在:/usr/lo...
  • mydo
  • mydo
  • 2017年02月22日 18:27
  • 1061

Mac OS安装gem rmagick

首先,必须安装ImageMagic
  • rocLv
  • rocLv
  • 2014年06月07日 11:18
  • 1759

gem 安装rmagick错误处理

Can't find Magick-config in /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:...
  • dianzishu222
  • dianzishu222
  • 2014年08月01日 08:30
  • 512

ubuntu 下安装RMagick

cat /proc/versionLinux version 2.6.28-11-generic (buildd@palmer) (gcc version 4.3.3 (Ubuntu 4.3.3-5u...
  • cocolong2002
  • cocolong2002
  • 2009年06月12日 11:03
  • 1249

四个方面谈企业团队管理

   余世维认为,团队就像冰山,呈现在人们视野中的部分往往只有1/9,而看不到的则占8/9。对企业来说,外边的1/9是其愿景、目标和策略,下面的8/9则是由企业文化、激励机制、学习和员工共识四个方面形...
  • zhangjf197926
  • zhangjf197926
  • 2006年11月14日 20:33
  • 570

redmine3.3.0安装问题

1.An error occurred while installing rmagick (2.16.0), and Bundler cannot continue. Make sure that ...
  • wind_324
  • wind_324
  • 2016年09月01日 17:14
  • 1982
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Rails上使用RMagick经验之谈
举报原因:
原因补充:

(最多只允许输入30个字)