圖像可以說是任何應用至關重要的一部分。從社交網絡到一個簡單的Bug追蹤器,圖像都扮演著重要的角色。然而管理圖像并不是一件容易的事情,需要提前耗費大量的時間精力去計劃。
本文演示了如何在Rail中實現這一目標。如何處理你的圖像以及在后臺創建多個版本?如何通過壓縮圖像又不損圖像質量,以此來提高頁面性能?這些且聽本文一一道來。
入門
本文教程是運行于Rails 4.2,通過MongoDb數據庫和HAML呈現視圖。不過本文所展示的片段應該兼容任何Rails版本(盡管有些配置差異)。
布置舞臺
ImageMagick是一套功能強大、穩定而且開源的工具集和開發包,你可以通過包管理把它安裝在你的電腦上。
Ubuntu上:
sudo apt-get -y install imagemagicksudo apt-get -y install libmagic-devsudo apt-get -y install libmagickwand-dev
Mac OS X上,建議使用自制程序:
brew install imagemagick
現在我們需要一個連接到本地ImageMagick庫的Ruby適配器。你可以使用MiniMagick,因為它是輕量級的:
# Gemfile gem 'mini_magick'
MiniMagick的特性
在正式開始之前,讓我們先了解一下某些MiniMagick的特性,以避免不必要的錯誤。
打開Rails控制臺(Rails c)并運行以下代碼:
# Open an image from a website image = MiniMagick::Image.open("https://s3.amazonaws.com/StartupStockPhotos/20140808_StartupStockPhotos/85.jpg") # Get the Image's widthimage.width # 4928 # Get the image's heightimage.height #3264
讓我們調整一下以適應我們的iPad:
image.resize "2048x1536" # Now get the image's new width and height p "Width is => #{image.width} and height is => #{image.height}"
更改后的文件存儲在哪呢?
image.path # temp path
操縱圖像存儲到一個臨時的路徑有消失的危險。所以要把它放到磁盤中,一個簡單的調用編寫方法如下:
image.write "public/uploads/test.jpg"
轉換圖像
或許你最常見的工作之一就是將圖像轉換成不同的格式。MiniMagick可以簡化這一過程:
image.format "png"image.write "public/uploads/test.png"
你還可以將多個操作放在同一模塊中:
image.combine_options do |i| i.resize "2048x1536" i.flip i.rotate "-45" i.blur "0x15"endimage.write "public/uploads/blur.png" 
至此,讓我們來看看如何將以上的這些與我們的Rails應用聯系到一起。
上傳文件
Carrierwave簡化了在Ruby中上傳文件,同時它與MiniMagick交互的也很好。
# Gemfile gem 'carrierwave'gem 'carrierwave-mongoid', :require => 'carrierwave/mongoid'
新聞熱點
疑難解答