You are on page 1of 7

您还未登录 !

我的应用 登录 注册

论坛首页 → Ruby版 → rails →

让rails处理图片再简单一点
全部 ruby rails rake DSL RJS YAML
 
« 上一页 1 2 3 4 下一页 »
浏览 7059 次
主题:让rails处理图片再简单一点
该帖已经被评为良好帖
作者 正文
发表时间:2008-07-14 
引用
相关文章:  

 让rails处理图片再简单一点
 请教一个关于super_image插件的问题
 活用插件attachment_fu,在rails中以AJAX方式上传文件

推荐圈子: Tapestry
更多相关推荐

      先来看看rails处理图片的过程吧,用户上传图片,首先要校验图片的格式,重命名用户提交的图片,
保存至上传的目录,或许你会用file-column帮你简化一些工作,如果你对上传的图片大小有特别的要求,
或许你又会找来RMagick来对图片进行裁剪再保存,在图片进行显示的时候,或许在某个地方图片要显示
的大小尺寸和你之前裁剪的不一致,你又要写js代码来做等比缩放,那么有没有一种一次到位的方法呢?
下面给大家推荐一款rails非常棒的插件-fleximage,基本可以帮你搞定所有的关于图片的那些事儿,以
下是我初步使用fleximage后所了解到的一些特性:

  1 使用配置非常简单,基本不用写任何关于图片处理的代码!

  2 能够帮你校验图片的有效格式

  3 图片上传前可以与处理图片的格式和大小

  4 图片显示时仍可以裁剪成你所需要的格式和大小

  5 图片显示时可以加上一些效果,比如边框 颜色 标题

  6 图片在显示可以轻松进行格式转换

   ………………

下面让我们一步步来享受fleximage给我提供的好处吧:)

1 安装,ruby script/plugin install http://github.com/Squeegy/fleximage.git,貌
http://www.javaeye.com/topic/214661?page=1
似要求你的项目要在svn的控制下才可以安装,不过没关系,我会把插件放在附件中,直接拷到你的项目
中即可。

2 建立与图片相关的model,在这里配置图片的上传目录,你无需去建这个目录,fleximage会自动生
成,另外还有图片的预处理信息,比如图片格式、大小、是否必须等等,这些属性非常容易理解,如
下:

Java代码

1. class Picture < ActiveRecord::Base   
2.   acts_as_fleximage :image_directory => 'public/upload'  
3.   use_creation_date_based_directories true  
4.   image_storage_format :jpg   
5.   require_image true  
6.   missing_image_message  'is required'  
7.   invalid_image_message 'was not a readable image'  
8.   default_image_path 'public/images/rails.png'  
9.   output_image_jpg_quality  85  
10.   preprocess_image do |image|   
11.    image.resize '200x300'  
 liuqiang  12.   end   
 等级:  13. end   

3 上传图片,首先在路由中加上:map.resources :pictures,这里view中采用form_for标签,你也可以用普通
form,但保证表单输入项和model属性对应起来。pictures控制器和提交图片的表单分别如下:

  
 文章: 837 
 积分: 1300   
 来自: 天之涯
Ruby代码

1. def new  
2.     @picture = Picture.new  
3. end  
4.   
5. def create   
6.     @picture = Picture.new params[:picture]   
7.     @picture.update_time = Time.now   
8.     @picture.create_time = Time.now   
9.     if @picture.save   
10.       redirect_to :action => "new"  
11.     else  
12.       flash[:notice] = 'Your photo did not pass validation!'  
13.       render :action => 'new'  
14.     end  
15.   end  

Ruby代码

1. <P>   
2. <P>   
3. <P> </P>   
4. <P> </P>   
5. <PRE class=ruby name="code"><%= flash[:notice] if flash[:notice] %>   
6. <% form_for @picture, :url => { :action => "create" } , :html => { :multipart => true } do |f| %>   
http://www.javaeye.com/topic/214661?page=1
7.   <p>   
8.     <b>标题</b><br />   
9.     <%= f.text_field :title %>   
10.   </p>   
11.   <p>   
12.     <b>上传图片</b><br />   
13.     <%= f.file_field :image_file %><br />   
14.     or URL: <%= f.text_field :url %>   
15.   </p>   
16.   <p>   
17.     <%= f.submit "创建" %>   
18.   </p>   
19. <% end %></PRE>   
20. <P>  </P>   
21. <P> 4 上传图片后会发现,在图片的上传目录下会有一个名字和数据库中保存的的新建记录id相同的
图片,下面来显示它吧,在这里你可以再次定制你的图片显示效果,显示的图片是用
<SPAN style="FONT-FAMILY: Courier New">fleximage自己的模板渲染的,该模板的命名是采用需
要渲染图片的action的名字加上需要图片显示的格式再加flexi,比如show.jpg.flexi,这是约定好的,
fleximage会自动拿它渲染需要在rails模板中显示的图片。模板分别如下:</SPAN></P>   
22. <P> </P>   
23. <P><SPAN style="FONT-FAMILY: Courier New">rails模板:</SPAN></P>   
24. <PRE><p> <%= image_tag formatted_picture_path(@picture, :gif) %> </p></PRE>   
25. <P> </P>   
26. <P> <SPAN><SPAN style="FONT-FAMILY: Courier New">fleximage模板:</SPAN>   
27. </SPAN></P><PRE><SPAN style="FONT-
FAMILY: Courier New">@picture.operate do |image| end </SPAN></PRE>   
28. <P><SPAN style="FONT-FAMILY: Courier New"> </SPAN></P>   
29. <P><SPAN style="FONT-FAMILY: Courier New">让我们看看效果吧:</SPAN></P>   
30. <P>   
31. </P><P><SPAN style="FONT-FAMILY: Courier New"> </SPAN></P>   
32. <P>   
33. <P>   
34. <P> </P>   
35. <P><IMG height=202 alt="" src="../../../upload/picture/pic/17858/5519777c-efba-3606-9a7b-
94e82c093c13.jpg " width=200></P>   
36. <P> </P>   
37. <P><SPAN style="FONT-FAMILY: Courier New">5 现在发现我想把图片放大一点,还要用gif格式进
行显示,并且加上边框 标题 颜色等,那在建一个fleximage模板来专门处理gif格式的图片,修改之
前的视图如下:</SPAN></P>   
38. <P> </P>   
39. <PRE class=java name="code"><p>    
40.   <%= image_tag formatted_picture_path(@picture, :gif) %>    
41. </p>   
42.   
43. @picture.operate do |image|   
44.     image.resize '400x400', :crop => true  
45.     image.border :size => 20, :color => 'green'  
46.     image.text 'I am DHH'  
47.     image.unsharp_mask   
48.     image.shadow   
49.  end  
50.  </PRE>   
51. <P>效果如下:</P>   
52. <P><IMG height=276 alt="" src="../../../upload/picture/pic/17860/ca62e3be-8485-3f70-b07c-
bd3e2af47a69.jpg " width=254></P>   
53. <P> </P>   
54.         

 fleximage.git.rar (669.7 KB) 
 下载次数: 295 

http://www.javaeye.com/topic/214661?page=1
Comprehensive support for testing Ajax / RIA / Web 2.0 applications
www.parasoft.com

声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接

 在繁琐中挣扎还是简化自主管理?
 下载免费的 IBM DB2 Express-C 数据库
 5月份Struts 2.0最新技术专题系列讲座
返回顶楼     
发表时间:2008-07-16 
 yangzhihuan  引用
 等级:  这倒是个好东西。对于这个有个问题:
Ruby代码

1. # @picture.operate do |image|     
2. #     image.resize '400x400', :crop => true     
3. #     image.border :size => 20, :color => 'green'     
4. #     image.text 'I am DHH'     
 5. #     image.unsharp_mask     
 文章: 129  6. #     image.shadow     
 积分: 170  7. #  end    
 来自: 广州
 这里只是对图片在展示的时候进行了处理,还是对原图片进行了修改(或者是为这个样式生成了新图
片),不太清楚。
    
返回顶楼
0 0 请登录后投票
 liuqiang 
 等级: 

发表时间:2008-07-17 
引用
在图片显示的时候做了处理,估计是生成了js对图片做了处理。
 这个东西非常好用,口碑也不错,强烈推荐使用
 文章: 837 
 积分: 1300 
 来自: 天之涯

    
返回顶楼
0 0 请登录后投票
 0701 
 等级: 

发表时间:2008-07-18 
引用
可以考虑把图片上传全部改用fleximage做了

 文章: 201 
 积分: 200 
 来自: 魔帝都

    
返回顶楼
0 0 请登录后投票
 leon0122 
http://www.javaeye.com/topic/214661?page=1
 等级: 

发表时间:2008-07-28 
引用
我按照上面的步骤做的时候,生成model  picture就会报错:
ERROR :: FlexImage requires the RMagick gem.  http://rmagick.rubyforge.org/install-faq.html 
ERROR :: FlexImage requires the RMagick gem.  http://rmagick.rubyforge.org/install-faq.html 

我用的是netbeans6.0
 文章: 22  不知道楼主用的rails是什么版本的??
 积分: 115  我也下载了rmagick-2.5.2.gem 也不行,不知道是不是版本的问题
 来自: 上海

    
返回顶楼
0 0 请登录后投票
发表时间:2008-07-28 
引用

 liuqiang   
 等级: 
leon0122 写道
我按照上面的步骤做的时候,生成model picture就会报错:
ERROR :: FlexImage requires the RMagick gem. http://rmagick.rubyforge.org/install-faq.html 
ERROR :: FlexImage requires the RMagick gem. http://rmagick.rubyforge.org/install-faq.html
我用的是netbeans6.0 
不知道楼主用的rails是什么版本的??
 我也下载了rmagick-2.5.2.gem 也不行,不知道是不是版本的问题
 文章: 837 
 积分: 1300   
 来自: 天之涯
 我用的是rails 2.0.2/nb6.1,RMagick是2.0,不过我当时没遇到什么问题,

你是第二步出错的吗?先重启服务器 or 重启电脑试试?

 
    
返回顶楼
0 0 请登录后投票
 shaka 
 等级: 

发表时间:2008-07-29 
引用
图片保存的是二进制还是文本?

 文章: 90 
 积分: 250 
 来自: 北京

    
返回顶楼
0 0 请登录后投票

发表时间:2008-07-29 
引用
 liuqiang  shaka 写道
 等级:  图片保存的是二进制还是文本?
http://www.javaeye.com/topic/214661?page=1
数据库存的是路径,图片最终要是进文件夹里面呆着


 文章: 837 
 积分: 1300 
 来自: 天之涯

    
返回顶楼
0 0 请登录后投票
 freeport 
 等级: 初级会员

发表时间:2008-08-03 
引用
url 怎么设置呢??? 

 文章: 29 
 积分: 30 
 来自: 宁波

    
返回顶楼
1 0 请登录后投票
 liuqiang 
 等级: 

发表时间:2008-08-04 
引用
<%= image_tag formatted_picture_path(@picture, :gif) %>


注意这句,model中已经配置了图片的目录地址,@picture中存有图片名,看源码可知是采用图片的id做名
 文章: 837  字的,再加上你的主域名,就是该图片的url
 积分: 1300 
 来自: 天之涯

    
返回顶楼
1 0 请登录后投票
 
« 上一页 1 2 3 4 下一页 »
论坛首页 → Ruby版 → rails

跳转论坛: Ruby
中港软件硕士不参加统考国家承认学位

 首页
 新闻
 论坛
 问答
 知识库
 博客
 圈子
 招聘

http://www.javaeye.com/topic/214661?page=1
 服务
 搜索

 Java
 AJAX
 Ruby
 Python
 敏捷
 MySQL
 图书
 Oracle
 Dorado
 普元

 广告服务
 JavaEye黑板报
 关于我们
 联系我们
 友情链接

© 2003-2009 JavaEye.com. All rights reserved. 上海炯耐计算机软件有限公司 [ 沪ICP备05023328号 ] 

http://www.javaeye.com/topic/214661?page=1

You might also like