不损质量?Rails下的图像处理
来源:互联网 发布:js中怎么删除属性 编辑:程序博客网 时间:2024/05/29 10:16
图像可以说是任何应用至关重要的一部分。从社交网络到一个简单的Bug追踪器,图像都扮演着重要的角色。然而管理图像并不是一件容易的事情,需要提前耗费大量的时间精力去计划。
本文演示了如何在Rail中实现这一目标。如何处理你的图像以及在后台创建多个版本?如何通过压缩图像又不损图像质量,以此来提高页面性能?这些且听本文一一道来。
入门
本文教程是运行于Rails 4.2,通过MongoDb数据库和HAML呈现视图。不过本文所展示的片段应该兼容任何Rails版本(尽管有些配置差异)。
布置舞台
ImageMagick是一套功能强大、稳定而且开源的工具集和开发包,你可以通过包管理把它安装在你的电脑上。
Ubuntu上:
Mac OS X上,建议使用自制程序:
现在我们需要一个连接到本地ImageMagick库的Ruby适配器。你可以使用MiniMagick,因为它是轻量级的:
MiniMagick的特性
在正式开始之前,让我们先了解一下某些MiniMagick的特性,以避免不必要的错误。
打开Rails控制台(Rails c)并运行以下代码:
让我们调整一下以适应我们的iPad:
更改后的文件存储在哪呢?
操纵图像存储到一个临时的路径有消失的危险。所以要把它放到磁盘中,一个简单的调用编写方法如下:
转换图像
或许你最常见的工作之一就是将图像转换成不同的格式。MiniMagick可以简化这一过程:
你还可以将多个操作放在同一模块中:
至此,让我们来看看如何将以上的这些与我们的Rails应用联系到一起。
上传文件
Carrierwave简化了在Ruby中上传文件,同时它与MiniMagick交互的也很好。
注意:如果你是在ActiveRecord或DataMapper上,配置会稍微不同。Carrierwave官方文档介绍了正确的方法,点此进入。
获取:
创建第一个上传:
这段代码是自说明,storage :file指示服务器将图像存储在本地服务器上,store_dir指定位置。
自从文件通过互联网传送,总会过滤传入的文件:
将这种上传置入我们的图像模型:
编辑image_uploader.rb来处理上传的图像:
尝试从Rails控制台创建一个新的图像:
上传图像在store_dir下是可用的。然而上传的图像是立即被处理的,并被200×200的图像覆盖。我们没有原始文件的副本留作以后编辑。所以为避免这种情况,我们需要创建多个版本的文件。
下面显示的是上段代码创建两个版本,检查版本由Carrierwave创建:
你注意到这些图像是瞬间生成的吗?这意味着图像转换发生在同一线程中,并且执行是被阻塞的,直到完成为止。在生产应用中,在同一线程里创建一个图像的多个版本是不受欢迎的。相反,我们应该有条件的处理这种情况。
这样,当我们创建一个新的图像时,副本将不会生成。我们可以在需要的时候手动去触发,运行如下代码:
这代码也是运行于前台,是一个阻塞操作,但至少可以尽可能的推迟到最后一刻。我们可以通过Resque在后台进一步的运行:
然后,列队:
性能提升
图像是厚重的,往往会减慢网站。减少页面负担的一种方法是压缩这些图像。Carrierwave图像优化器可以帮助我们飞速的压缩图像。
将下面这段添加到Gemfile:
然后编辑image_uploader:
如此压缩不会有视觉丧失。
图像处理是一个巨大的垂直,我们几乎只触及表面。我们可以建立很多很酷的东西。如果您对这篇文章感兴趣,请在评论中分享您的想法。
原文来自:sitepoint
- 不损质量?Rails下的图像处理
- 数字图像处理,若干图像质量评价指标的实现
- 怎样在不处理的情况下在ABBYY FineReader 12中添加图像
- 怎样在不处理的情况下在ABBYY FineReader 12中添加图像
- 多机部署rails下的session处理实践
- 图像处理质量评价标准之PSNR
- ffmpeg.exe 命令行视频处理图像质量
- 图形图像处理-之-任意角度的高质量的快速的图像旋转 中篇 高质量的旋转
- 图形图像处理-之-任意角度的高质量的快速的图像旋转 下篇 高质量的旋转
- 图形图像处理-之-任意角度的高质量的快速的图像旋转 中篇 高质量的旋转
- 如何在不改变图像质量的情况下压缩图像的文件大小
- latex图像质量的保持
- 图像质量的评价准则
- 影响图像质量的参数
- C#的图像处理库 mark下
- 基于RGBA模型下的图像处理
- GPU 加速下的图像处理
- GPU 加速下的图像处理
- Android使用自定义弹出框AlertDialog
- hdu5188 zhx and contest (DP+map)
- OCM考试经验--物化视图日志详解
- 【Android】【编译】Android中集成第三方软件包(.jar, .so)
- 模版特化 偏特化
- 不损质量?Rails下的图像处理
- Android IPC编程简介
- 对找工作功不可没——评《深入理解计算机系统》
- 思科数据中心解决方案与案例合集
- Struts Action 与ActionSupport的区别
- 为什么中国的程序员总被称为码农
- [Android开发]Activity间切换动画の左出右进
- Java中关于原子操作和volatile关键字
- windows 平台下 event 与 mutex的配合使用 模拟posix的条件变量