`

利用 File_column 來做到縮圖

阅读更多
圖片上傳,縮圖製作這幾個功能可以說是 Web App 做到爛掉的東西,我們之前遇到縮圖,都是使用我們公司 Team 自己開發的 RMagick Image Upload API。當我最近著手 某個 Project 的時候,我想說「既然大家都推薦 File Column ,我這次不用自己寫的 API ,也來用用看 File Column 好了」。一不用則以,一用 File Column ,我還是感到相當的 shock.....................

「怎麼可能,製作縮圖怎麼可能可以做到那麼簡單。」

File Column 就是一個結合 Rmagick ,並且將圖片依照自己的機制存在 public 資料夾下面的 Plugin,License 是 MIT 。下列範例直接抄 File_column 的範例,小技巧來自airport 的 整合File-Column和Rmagick功能实现图片上传

安裝

因為 file column 是基於 Rmagick,所以必須先安裝 Rmagick。安裝好 Rmagick 之後可以到file column 官方網站下載 tarball ,或是直接使用 plugin 安裝
./script/plugin install
http://opensvn.csie.org/rails_file_column/
plugins/file_column/trunk
基本上傳

1. 設定

首先,你必須在某個 Model 加入一個 column,這裡叫 Entry Model ,Column 叫做 image 好了。
   class Entry < ActiveRecord::Base
file_column :image
end
好,這樣已經把設定弄好了。

2. 上傳圖片的 Form Helper

以前 image upload 都是用
    <%= file_field "entry", "image" %>
現在請在 view 裡面使用 file_column_field
    <%= file_column_field "entry", "image" %>
3. 顯示圖片

要顯示圖片,還是使用 image_tag 來顯示,不過 image url 必須採用 url_for_file_column
    <%= image_tag( url_for_file_column("entry", "image") ) %>

4. 完成

如何,file column 真的很簡單吧。設定,顯示,上傳都各一行即可。


縮圖

但是上面的功能只能說基本,要夠好用,必須可以做到縮圖。要作縮圖的時候,上傳 file_column_field 完全沒有任何改變,所以這裡就不解釋。

1. 設定

設定方面,你加入你想要加入的縮圖 size ,我這邊設三種縮圖的版本,最小的縮圖是 thumb 25x25 ,medium 是 150x150,large是 300x300 。
   class Entry < ActiveRecord::Base
file_column :image , :magick => {
:versions => { "thumb" => "25x25", "medium" => "150x150" , "large" => "300x300" }
}
end

2. 顯示圖片

要顯示縮圖的圖片,只需要加入剛剛作縮圖的版本,剛剛設定的是 thumb, medium, large

Thumb:
    <%= image_tag( url_for_file_column("entry", "image", "thumb" ) ) %>
Medium:
    <%= image_tag( url_for_file_column("entry", "image", "medium" ) ) %>
Large:
    <%= image_tag( url_for_file_column("entry", "image", "large" ) ) %>
原圖:
    <%= image_tag( url_for_file_column("entry", "image") ) %>

小技巧

這邊還有出自airport 的 整合File-Column和Rmagick功能实现图片上传 的一些小技巧
"thumb" => "25x25!" : ! 代表就是要縮成 25x25 ,也就是會根據這個比例作破壞性的壓縮
"thumb" => "25x25>" : > 代表假設這個圖本身就小於 25x25,就不作縮圖了。

如果要限制上傳的圖形格式,就使用 validate_format_of 即可
  class Entry < ActiveRecord::Base
validates_format_of :image, :with=>/^.*(.jpg|.JPG|.gif|.GIF)$/
file_column :image , :magick => {
:versions => { "thumb" => "25x25", "medium" => "150x150" , "large" => "300x300" }
}
end
file column 上傳的圖片到哪裡去了

如果 Model 已經 save 好了,你可以仔細看看 public 資料夾,裡面找你使用 file column 的 Model 名字的資料夾,你會發現他放到那個資料夾的 image 資料夾下面去了,裡面每個資料夾都是某個 model emtry 的 id。在這裡的例子裡,Entry model 的 image 是他會放到 public/entry/image/ 底下。

如果是image 已經上傳到 Server,Model 還沒有 save 的情況,他會放在 public/entry/image/tmp/ 底下。


延伸閱讀
分享到:
评论

相关推荐

    oracle数据库设置db_recovery_file_dest_size参数为0

    当你设置了归档路径,并且不希望使用闪回区域来存储归档日志时,可以将`db_recovery_file_dest_size`设置为0,这样Oracle就不会在这个位置创建或存储任何恢复文件。 设置`db_recovery_file_dest_size`为0的步骤如下...

    __FILE__,__LINE__,FUNCTION__实现代码跟踪调试(linux下c语言编程 )

    以下是关于这三个宏的详细解释以及如何在调试过程中利用它们。 1. `__FILE__` 宏: `__FILE__` 返回一个字符串常量,表示当前源代码文件的名称。在编译期间,这个宏会被替换为包含当前代码所在的源文件名。当在...

    Http_File_Server

    此外,对于教育场景,教师可以利用它分享教学资料,学生则能便捷地下载学习资源。对于家庭用户,Http_File_Server也能成为家庭多媒体中心,轻松分享照片、音乐和视频。 当然,使用Http_File_Server也需要注意一些...

    file_compress和file_uncompress

    主要介绍了zlib压缩库中函数file_compress和file_uncompress的使用方法,有挺多的测试例子,已验证完毕

    JZKO_File_16_addonsJZKO_File_16_addonsJZKO_File_16_addons

    JZKO_File_16_addonsJZKO_File_16_addonsJZKO_File_16_addonsJZKO_File_16_addonsJZKO_File_16_addonsJZKO_File_16_addonsJZKO_File_16_addonsJZKO_File_16_addons

    关于file_put_contents的一些小测试1

    总结来说,`file_put_contents`是一个强大且灵活的函数,但同时也需要谨慎使用,特别是在处理用户输入时。通过理解其工作原理和潜在的安全风险,我们可以更好地保护我们的应用程序,防止恶意攻击。在编写代码时,应...

    File_System_Auditor2.53+keygen已测

    File_System_Auditor文件系统审计软件可以实现对共享文件的审计(日志可追溯事件当天),可在Windows Server 2008 R2 64位系统及以上操作系统安装和运行。

    10g中db_recovery_file_dest和log_archive_dest_greatwhite

    ### Oracle 10g中的db_recovery_file_dest与log_archive_dest详解 #### 一、概述 ...在实际操作中,建议根据具体的业务需求和资源条件来制定相应的归档策略,从而最大化利用这些功能带来的优势。

    gf_enable_column.zip_PowerBuilder_datawindow

    压缩包内的文件“gf_enable_column.srf”是一个Shared Resource File(共享资源文件),它是PowerBuilder中用于存储自定义对象、函数库、图片等资源的文件。在这个上下文中,这个.srf文件很可能包含了“gf_enable_...

    FILE_CUT.rar_Splitter_file c_file c_filecut_split

    总的来说,"FILE_CUT.rar_Splitter_file c_file c_filecut_split"是一款实用的文件管理工具,其易用性和效率使得大文件的处理变得轻松便捷。无论是在个人还是商业环境中,它都能成为处理大文件的理想选择。然而,...

    file_html_javaBYgetHtml

    例如,在一个动态生成网页的应用程序中,可以利用此类来存储不同用户的个性化HTML文件名称。 #### 数据交换格式 在某些情况下,`file_html`类也可以作为一种简单的数据交换格式。例如,在两个系统之间传输HTML文件...

    解决PHP curl或file_get_contents下载图片损坏或无法打开的问题

    在使用PHP进行网页开发时,我们常常需要用到cURL或者file_get_contents函数来从网络上获取资源,例如图片、文本文件等。然而,在使用这些函数下载图片时,有时会遇到图片损坏或无法打开的问题。这不仅影响了用户体验...

    Setup_File_Magic_2022.exe

    Setup_File_Magic_2022.exe

    Http_File_Server一个非常简单的架设http的小软件

    在安全方面,虽然Http_File_Server的初衷是提供便捷的服务,但用户仍需注意,不恰当的使用可能会导致隐私泄露或被恶意利用。因此,建议仅对信任的网络或用户开放服务器,并确保定期更新软件以获取最新的安全补丁。 ...

    swf_file_format_spec_v9.7z

    swf_file_format_spec_v9.pdf swf_file_format_spec_v9.pdf swf_file_format_spec_v9.pdf swf_file_format_spec_v9.pdf

    Synology_File_Station_API_Guide.pdf

    总的来说,通过这份《群晖File Station API指南》,开发者可以深入理解如何利用Synology提供的接口来与File Station进行有效通信,从而实现对群晖NAS设备的程序化控制,创建定制化的数据管理和备份解决方案。...

    K8S主机Prometheus监控blackbox-exporter(file_sd_configs)资源清单及镜像文件

    原文链接:https://blog.csdn.net/m0_37814112/article/details/122538085 说明:基于file_sd_configs部署blackbox-exporter监控k8s服务

    Read_image_file.rar_Read_image_file_labview 图片_labview读取图片_显示图片_

    1. **读取图片**: 在LabVIEW中,我们可以使用“File»Open»Image”函数来读取图片文件。这个函数可以从多种格式的图片文件中加载图像,包括JPEG、PNG、BMP等。在 "Read_image_file.vi" 中,很可能就封装了这个功能...

    file_merger1.0.rar_FileMerg_file Merger_文件合并

    总的来说,"file_merger1.0"是一款实用的文件合并工具,它的严谨命名规则和清晰的源码结构展示了文件处理软件的设计思路。无论是普通用户还是开发者,都能从中获益,提升文件管理和处理的效率。然而,对于非开发人员...

    flutter file-selector

    Flutter的file_selector插件可以帮助开发者在移动应用中方便地选择文件。 要使用file_selector插件,首先需要将插件的依赖项添加到pubspec.yaml文件中,并运行flutter pub get命令获取插件的最新版本。 在插件使用...

Global site tag (gtag.js) - Google Analytics