- 浏览: 165230 次
- 性别:
- 来自: 华东
-
文章分类
最新评论
-
chen_miao:
我是初学者,请问,我在flex设计好了带有按钮和下拉框的界面, ...
ruby+flex实现天气预报 -
barrytyh:
很多技术人员都有想法,但忘了一个根本性的问题,谁在给你MONE ...
互联网创业与软件开发 -
fireflyman:
囧......
关于并发和并行 -
fireflyman:
你老再次出现了
谈谈互联网新产品如何起步 -
qhh394141930:
写得很详细,受教了。谢谢!
从瀑布模型、极限编程到敏捷开发
先来看看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,貌似要求你的项目要在svn的控制下才可以安装,不过没关系,我会把插件放在附件中,直接拷到你的项目中即可。
2 建立与图片相关的model,在这里配置图片的上传目录,你无需去建这个目录,fleximage会自动生成,另外还有图片的预处理信息,比如图片格式、大小、是否必须等等,这些属性非常容易理解,如下:
class Picture < ActiveRecord::Base acts_as_fleximage :image_directory => 'public/upload' use_creation_date_based_directories true image_storage_format :jpg require_image true missing_image_message 'is required' invalid_image_message 'was not a readable image' default_image_path 'public/images/rails.png' output_image_jpg_quality 85 preprocess_image do |image| image.resize '200x300' end end
3 上传图片,首先在路由中加上:map.resources :pictures,这里view中采用form_for标签,你也可以用普通form,但保证表单输入项和model属性对应起来。pictures控制器和提交图片的表单分别如下:
def new @picture = Picture.new end def create @picture = Picture.new params[:picture] @picture.update_time = Time.now @picture.create_time = Time.now if @picture.save redirect_to :action => "new" else flash[:notice] = 'Your photo did not pass validation!' render :action => 'new' end end
<%= flash[:notice] if flash[:notice] %> <% form_for @picture, :url => { :action => "create" } , :html => { :multipart => true } do |f| %> <p> <b>标题</b><br /> <%= f.text_field :title %> </p> <p> <b>上传图片</b><br /> <%= f.file_field :image_file %><br /> or URL: <%= f.text_field :url %> </p> <p> <%= f.submit "创建" %> </p> <% end %>
4 上传图片后会发现,在图片的上传目录下会有一个名字和数据库中保存的的新建记录id相同的图片,下面来显示它吧,在这里你可以再次定制你的图片显示效果,显示的图片是用fleximage自己的模板渲染的,该模板的命名是采用需要渲染图片的action的名字加上需要图片显示的格式再加flexi,比如show.jpg.flexi,这是约定好的,fleximage会自动拿它渲染需要在rails模板中显示的图片。模板分别如下:
rails模板:
<p> <%= image_tag formatted_picture_path(@picture, :gif) %> </p>
fleximage模板:
@picture.operate do |image| end
让我们看看效果吧:
5 现在发现我想把图片放大一点,还要用gif格式进行显示,并且加上边框 标题 颜色等,那在建一个fleximage模板来专门处理gif格式的图片,修改之前的视图如下:
<p> <%= image_tag formatted_picture_path(@picture, :gif) %> </p> @picture.operate do |image| image.resize '400x400', :crop => true image.border :size => 20, :color => 'green' image.text 'I am DHH' image.unsharp_mask image.shadow end
效果如下:
- fleximage.git.rar (669.7 KB)
- 下载次数: 542
评论
@picture.operate do |image| image.resize '140x180', :crop => true image.image_overlay 'public/images/logo.png', :alignment => :bottom_right, :offset => '20x20' end
不错的Plugin,
可跟 attachment_fu 比有什么区别和优势呢
缩放吗?
我win下用rmagick出现这个错误
undefined method `cur_image'
大侠们知道是什么问题吗?
见这个讨论的贴
http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=12972
Ruby代码
require 'RMagick' include Magick pic = ImageList.new("vd2.jpg") l = pic.columns > pic.rows ? pic.columns : pic.rows f = 128.0/l; thumb = pic.thumbnail(f) thumb.write("vd2_tb.jpg")
结果…………不行……
后来发现要先“require 'rubygems' ”一下才行,当然这不是主要问题,主要问题是:我光require啊include啊都没问题,一旦把pic = ImageList.new("vd2.jpg")这一行加上,就会报错,Ruby.exe的runtime error什么什么的,而且连报四五个=_=
有人遇到过这种情况么?麻烦讲解一下是哪里不对吧……Ruby的版本问题?我的Ruby是1.8.6,下载的那个包叫“RMagick-2.9.0-ImageMagick-6.4.8-6-Q8.zip”
我也遇到这个问题.是不是版本的问题?
一运行调用到fleximage的东西,就跳出错误提示窗口.
runtime error
program \bin\ruby
r6034
调用c库的时候不正确?
它是在图片显示的时候在内存中进行处理的,不过这样也带来一个问题,第次显示图片都要用RMagick进行图片处理,加大了服务器的压力。有时这样处理是不是更好:我既要显示一个缩略图,又要原图,用以前的方法是直接在服务器上生成了一个缩略图,图片第次显示的时候直接显示缩略图原样,服务器不用即时处理,这样是不是好一些?
我今天弄了一下午的这个Fleximage,给我的感觉就是方便级了,不过我是不会使用这个插件的,好失望。
这个插件方便所带来的问题就是性能!
每次action render那个show.png.flexi模板时,好花费时间啊。
就如我上面用Product展示这个例子吧,在商品列表页面,我要显示一个小的略略图(我用gif来显示小图,然后在商品详细页面使用JPG显示大图),
有这样的一列:<td><%= image_tag formatted_product_path(product, :gif) %></td>
如果index页面的@products的size为10(现实情况中可以这个数字大得多),我查看log,一共请求了11次,那10次请求就是用来处理生成图片缩略图(请求show.gif.flexi模板),这样下来真的是不划算啊,我每次打开index页面,明显看到ff的进度条在不断向前推进,那就是在处理图片啊。
所以还是放弃这个插件,哎,无奈!
file_column和attach_fu,不知道哪一个会好一点。
性能问题?确实存在,不过应该没有看官网把?上面建议要用cache,不然,机器就会被拖死,详细看官网把
Ruby代码
require 'RMagick' include Magick pic = ImageList.new("vd2.jpg") l = pic.columns > pic.rows ? pic.columns : pic.rows f = 128.0/l; thumb = pic.thumbnail(f) thumb.write("vd2_tb.jpg")
结果…………不行……
后来发现要先“require 'rubygems' ”一下才行,当然这不是主要问题,主要问题是:我光require啊include啊都没问题,一旦把pic = ImageList.new("vd2.jpg")这一行加上,就会报错,Ruby.exe的runtime error什么什么的,而且连报四五个=_=
有人遇到过这种情况么?麻烦讲解一下是哪里不对吧……Ruby的版本问题?我的Ruby是1.8.6,下载的那个包叫“RMagick-2.9.0-ImageMagick-6.4.8-6-Q8.zip”
考虑到安全方面的问题,xmlrequest不支持文件传输,可以考虑form + iframe的方式,可以实现类似效果
如果是file_column,则可以通过 file_column :image_src 方式来制定将图片名保存到image_src个字段,
如果是attachment_fu,则会创建符合插件自身需求的好几个字段来保存图片信息。
我测试了一下fleximage,当按照我已经创建好的字段来作上传:
<p>
<%= f.label :src %><br />
<%= f.file_field :src %>
</p>
系统会提示错误:Image file is required
然后我改成:
<p>
<%= f.label :src %><br />
<%= f.file_field :image_file %>
</p>
发现图片上传成功,不过,根本就没跟pictures表的任何一个字段挂钩!我错在哪里?
约定大于配置,根据model对象的id就可以找到图片!
偶现在上传图片是自己封装mini_magick,也是用model对象的id作为图片名
如果是file_column,则可以通过 file_column :image_src 方式来制定将图片名保存到image_src个字段,
如果是attachment_fu,则会创建符合插件自身需求的好几个字段来保存图片信息。
我测试了一下fleximage,当按照我已经创建好的字段来作上传:
<p>
<%= f.label :src %><br />
<%= f.file_field :src %>
</p>
系统会提示错误:Image file is required
然后我改成:
<p>
<%= f.label :src %><br />
<%= f.file_field :image_file %>
</p>
发现图片上传成功,不过,根本就没跟pictures表的任何一个字段挂钩!我错在哪里?
我按照上面的步骤做的时候,生成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 也不行,不知道是不是版本的问题
win32-xxx.exe也需要安装的,不过也要注意重启netbeans if netbeans!
它是在图片显示的时候在内存中进行处理的,不过这样也带来一个问题,第次显示图片都要用RMagick进行图片处理,加大了服务器的压力。有时这样处理是不是更好:我既要显示一个缩略图,又要原图,用以前的方法是直接在服务器上生成了一个缩略图,图片第次显示的时候直接显示缩略图原样,服务器不用即时处理,这样是不是好一些?
我今天弄了一下午的这个Fleximage,给我的感觉就是方便级了,不过我是不会使用这个插件的,好失望。
这个插件方便所带来的问题就是性能!
每次action render那个show.png.flexi模板时,好花费时间啊。
就如我上面用Product展示这个例子吧,在商品列表页面,我要显示一个小的略略图(我用gif来显示小图,然后在商品详细页面使用JPG显示大图),
有这样的一列:<td><%= image_tag formatted_product_path(product, :gif) %></td>
如果index页面的@products的size为10(现实情况中可以这个数字大得多),我查看log,一共请求了11次,那10次请求就是用来处理生成图片缩略图(请求show.gif.flexi模板),这样下来真的是不划算啊,我每次打开index页面,明显看到ff的进度条在不断向前推进,那就是在处理图片啊。
所以还是放弃这个插件,哎,无奈!
file_column和attach_fu,不知道哪一个会好一点。
cache了没有???
它是在图片显示的时候在内存中进行处理的,不过这样也带来一个问题,第次显示图片都要用RMagick进行图片处理,加大了服务器的压力。有时这样处理是不是更好:我既要显示一个缩略图,又要原图,用以前的方法是直接在服务器上生成了一个缩略图,图片第次显示的时候直接显示缩略图原样,服务器不用即时处理,这样是不是好一些?
我今天弄了一下午的这个Fleximage,给我的感觉就是方便级了,不过我是不会使用这个插件的,好失望。
这个插件方便所带来的问题就是性能!
每次action render那个show.png.flexi模板时,好花费时间啊。
就如我上面用Product展示这个例子吧,在商品列表页面,我要显示一个小的略略图(我用gif来显示小图,然后在商品详细页面使用JPG显示大图),
有这样的一列:<td><%= image_tag formatted_product_path(product, :gif) %></td>
如果index页面的@products的size为10(现实情况中可以这个数字大得多),我查看log,一共请求了11次,那10次请求就是用来处理生成图片缩略图(请求show.gif.flexi模板),这样下来真的是不划算啊,我每次打开index页面,明显看到ff的进度条在不断向前推进,那就是在处理图片啊。
所以还是放弃这个插件,哎,无奈!
file_column和attach_fu,不知道哪一个会好一点。
这个东西非常好用,口碑也不错,强烈推荐使用
怎么可能是这样?JS有对图片操作的API吗?是Fleximage调用了Rmagick的API对图片进行了处理,这一切都是在内存中进行的,也就是说处理后的图片是生成好的放在内存中,你可以将图片保存到本地看看,是不是这样的。
它是在图片显示的时候在内存中进行处理的,不过这样也带来一个问题,第次显示图片都要用RMagick进行图片处理,加大了服务器的压力。有时这样处理是不是更好:我既要显示一个缩略图,又要原图,用以前的方法是直接在服务器上生成了一个缩略图,图片第次显示的时候直接显示缩略图原样,服务器不用即时处理,这样是不是好一些?
另外,这插件的确不错,对于对一个Model(如商品)加上一个图片功能的确方便, 不用修改Product的属性(表字段),只需要加上acts_as_fleximage :image_directory => 'public/upload'这些代码就立刻让商品有了"商品预览功能",不过我现在有一个问题,如果一个商品要有多个图片,则不能这样简单的手段来处理了吧,难道又要像以前那样建立一个关联的model,不知道还有什么方便的方法没有?(这插件都已经这么好用了,我还是贪心啊)
<p> </p>
我是这样做的:
使用generate scaffold web name:string
然后给Web这个Model加上你帖子中所说的那些。
然后改了一下new页面的标签,使表单可以上传图片了。
现在在show页面,我按你介绍的使用<%= image_tag formatted_web_path(@web, :png) %>
,结果图片不能显示,我查询html代码,输入的是<img alt="3" src="/webs/3.png" />
请指点一下:)
另外你的帖子中:
显示的图片是用fleximage自己的模板渲染的,该模板的命名是采用需要渲染图片的action的名字加上需要图片显示的格式再加flexi,比如show.jpg.flexi,这是约定好的,fleximage会自动拿它渲染需要在rails模板中显示的图片。模板分别如下:
rails模板:
<p> <%= image_tag formatted_picture_path(@picture, :gif) %> </p>
fleximage模板:
@picture.operate do |image| end
发表评论
-
创建你自己的rails generator
2010-01-27 15:01 1245在多个rails项目中,有时需要共享一些公用的componen ... -
rspec实践一(从零开始)
2009-12-25 12:52 1406关于利用rspec的文章感 ... -
javascript-image-cropper-ui with rails
2009-07-31 23:18 1530在rails上传头像的过程中,一般后端会采用rma ... -
简简单单在rails中做定时任务
2009-07-27 19:58 3424在平时的开发过程中,经常会遇到一些定时任务的需求 ... -
用restful_authentication和role_requirement搭建验证授权系统
2008-09-30 21:20 1602转自 http://fanix.iteye.com/blog/ ... -
Rails中html_escape和sanitize
2008-09-26 13:33 2591转自:http://blackanger.blog.51cto ... -
Rails简洁的模板系统Malline
2008-09-14 15:25 1443前段时间听说ra ... -
在rails中优雅的进行模型校验
2008-09-07 20:53 2235在用rails进行开发时,最常见的操作的是前台提交 ... -
win+apache+mongrel下部署ROR
2008-09-01 20:16 1158gem install mongrel #选择最 ... -
Ruby中使用Memecached
2008-09-01 20:03 1327sudo apt-get install memcached ... -
在rails中使用memcached
2008-09-01 20:00 1159libeven memcached的使用需要li ... -
在Ruby中设计Callback机制
2008-08-31 21:11 1974阅读Paperclip源码,发现里面有一个不错的callbac ... -
我怎么就觉得rails适合做大型应用
2008-08-25 13:24 3602之前读了不少 ... -
像操作ActiveRecord一样操作XML
2008-08-10 18:05 1299在开发RESTful应用或者实现多个应用系统交互时 ... -
ImageMagick/Rmagick 安装的那些事儿
2008-08-05 12:54 1198windows平台×××××××××××××××××××××× ... -
让google来为rails画图表
2008-07-26 17:05 1404去年年底的时候,所做的一个rails项目涉及到图表 ... -
10分钟给一个rails遗留系统添加标签功能
2008-07-19 10:18 1022早些时候做过了一个rails系统,当时没有涉及到标签的功 ... -
分享一款word风格的rails在线编辑器
2008-07-09 16:51 1549在线编辑器是web应用中最常见的东西了,关于它的作用 ... -
让rails处理图片再简单一点
2008-07-07 12:50 1134先来看看rails处理图片的过程吧,用户上传图片, ... -
利用rails轻松建立个性化主页门户
2008-07-04 12:10 1158简单来说,个性化主页就是结合了各种小模块和网络信息 ...
相关推荐
3DGallery是一个基于Ruby on Rails框架构建的应用程序,它旨在提供一个独特的用户体验,让用户能够展示和管理他们的三维图像图库。这个项目的核心特性是利用WebGL技术,这是一种在浏览器中实现3D图形渲染的标准,...
添加图像,字体和文件 使用public文件夹 更改HTML 在模块系统之外添加资产 何时使用public文件夹 使用全局变量 添加引导程序使用自定义主题 增加流量 添加路由器 添加自定义环境变量 在HTML中引用环境变量 在Shell...
361CRM平台的配置功能的强大,并不以损失平台应用的易用性为基础,361CRM平台在操作上采用引导式操作,以及提供方便易用的在线帮助,大大地降低了系统使用的复杂度,使系统更加地人性化、简易化。 实时即时 ...
2. **游戏框架**:Ruby有一些游戏开发框架,如Gosu,它提供了一种简单的方式来创建2D游戏。开发者可以利用Gosu处理图形、音频、输入等游戏基本元素。 3. **对象编程**:Ruby是一种强面向对象的语言,游戏中的角色、...
内容概要:本文详细介绍了如何利用A*算法改进传统的往返式路径规划,解决扫地机器人在复杂环境中容易卡住的问题。首先构建了一个可视化的栅格地图用于模拟环境,然后引入了优先级运动规则,使机器人能够有规律地进行往返清扫。当遇到死角时,通过A*算法计算最佳逃生路径,确保机器人能够顺利脱困并继续完成清扫任务。实验结果显示,改进后的算法显著提高了清洁覆盖率,降低了路径重复率。此外,还讨论了一些潜在的优化方向,如动态调整启发函数权重、断点续传以及能耗模型等。 适合人群:对路径规划算法感兴趣的科研人员、自动化专业学生、扫地机器人开发者。 使用场景及目标:适用于需要高覆盖率和低重复率的室内清洁任务,旨在提高扫地机器人的工作效率和智能化水平。 其他说明:文中提供了详细的Matlab代码实现,并附带了仿真测试结果,有助于读者理解和复现该算法。
爬取喜马拉雅听书(1)
安卓向上传递数据学习笔记总结
1、文件说明: Centos8操作系统tigervnc-selinux-1.11.0-9.el8.rpm以及相关依赖,全打包为一个tar.gz压缩包 2、安装指令: #Step1、解压 tar -zxvf tigervnc-selinux-1.11.0-9.el8.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm
内容概要:本文详细介绍了户外储能电源双向逆变器板的技术资料及其特点。涵盖原理文件、PCB文件、源代码、电感与变压器规格参数等,适用于2KW(最大3KW)的户外储能电源。文中强调了双向软开关DC-DC设计、两颗M0+ 32位MCU的分工、SPWM调制方式、H桥IGBT的应用、详细的电气参数和技术特性。此外,还包括了SPWM信号生成代码示例、硬件设计细节、生产注意事项等。 适合人群:从事户外储能电源开发的技术人员、电子工程师、产品经理等。 使用场景及目标:帮助开发者快速掌握双向逆变器板的设计和生产要点,缩短产品研发周期,提高产品质量和可靠性。具体应用场景包括但不限于户外应急电源、便携式储能设备等。 其他说明:本文提供了丰富的技术细节和实践经验,如双向软开关DC-DC设计、SPWM调制、IGBT驱动、EMC整改记录等,有助于解决实际开发中的难题。同时,附带的实际案例展示了该方案的成功应用,进一步证明了其可行性和优越性。
电子仿真教程,从基础到精通,每个压缩包15篇教程,每篇教程5000字以上。
内容概要:美国计算机学会(ACM)是一个成立于1947年的国际性计算机专业组织,致力于推动计算机科学的发展,提供教育、资源和专业发展机会。ACM的使命是促进计算机科学和信息技术领域的进步,愿景是成为全球计算机专业人士的首选组织。其核心价值包括卓越、诚信、包容性、合作和创新。ACM定期举办学术会议,如SIGGRAPH和图灵奖颁奖典礼,出版高质量的学术期刊和会议论文集,涵盖人工智能、软件工程、网络安全等领域。此外,ACM还提供在线课程、研讨会、认证项目等教育资源,以及职业规划、网络机会和领导力培训等职业发展服务。ACM图灵奖被誉为“计算机界的诺贝尔奖”,每年颁发给对计算机科学和技术做出重大贡献的个人。; 适合人群:计算机科学领域的专业人士、教育工作者、工程师和学生。; 使用场景及目标:①了解计算机科学领域的最新研究成果和发展趋势;②获取高质量的教育资源和职业发展机会;③参与计算机科学领域的学术交流和合作。; 其他说明:ACM作为一个全球性的组织,在教育、研究和行业实践中发挥着重要作用,推动了技术创新和社会进步。
logstash-8.17.4-windows-x86_64.zip
springboot 一个基于Springboot使用Aspect实现一个切面,以记录日志为例
音箱底部折边设备sw22可编辑_三维3D设计图纸_包括零件图_机械3D图可修改打包下载_三维3D设计图纸_包括零件图_机械3D图可修改打包下载.zip
内容概要:本文详细介绍了如何使用Python、Django和MySQL构建一个完整的个性化图书推荐系统。系统从前端界面设计、后端逻辑实现到数据库设计,涵盖了用户管理、图书管理、评分系统等功能模块。重点讲解了基于用户和项目的协同过滤算法实现,以及在用户评分数据不足时的标签推荐备份方案。此外,还包括了系统部署、测试和优化的具体步骤,如云服务器部署、性能测试、数据库优化等。 适合人群:具备一定Python和Web开发基础的研发人员,尤其是对推荐系统感兴趣的技术爱好者。 使用场景及目标:适用于希望深入了解图书推荐系统的工作原理和实现细节的技术人员。目标是帮助读者掌握从零开始搭建一个完整的个性化推荐系统的方法,包括前后端开发、算法实现和系统部署。 其他说明:文中提供了大量代码示例和实战经验,如数据库设计、爬虫实现、权限管理等,有助于读者更好地理解和应用相关技术。
Ai和python学习资料
文本摘要
冲击试验机sw22_三维3D设计图纸_包括零件图_机械3D图可修改打包下载_三维3D设计图纸_包括零件图_机械3D图可修改打包下载.zip
内容概要:本文详细介绍了MyBatis Plus(MP),它是MyBatis的增强工具,旨在简化CRUD操作、提高开发效率。其主要功能包括内置分页插件、简化CRUD操作以及代码生成器。使用时只需引入相应依赖,自定义Mapper接口继承BaseMapper泛型接口,并通过实体类反射获取数据库表信息。文章还介绍了常用注解如@TableName、@TableId、@TableField、@TableLogic和@Version,配置项如全局配置、类型别名和Mapper文件路径,以及核心功能如批量插入、分页查询、条件构造器(Wrapper)等。此外,扩展功能涵盖逻辑删除、枚举处理器和JSON处理器,插件功能则包括分页插件的配置和使用。 适合人群:具备一定Java开发经验,尤其是熟悉MyBatis框架的开发者,特别是那些希望提高开发效率、减少重复代码的工作1-3年研发人员。 使用场景及目标:①简化数据库操作,提高开发效率;②快速生成代码,减少手动编写SQL语句的工作量;③实现分页查询、逻辑删除、枚举和JSON字段处理等高级功能,提升应用的灵活性和可维护性。 其他说明:本文不仅提供了MyBatis Plus的功能介绍和使用方法,还深入探讨了条件构造器(Wrapper)的使用技巧,帮助开发者更好地理解和掌握这一强大的工具。在实际开发中,合理利用这些功能可以显著提高开发效率和代码质量。建议在学习过程中结合具体项目实践,逐步掌握各个功能的应用场景和最佳实践。
电子仿真教程,从基础到精通,每个压缩包15篇教程,每篇教程5000字以上。