圖像可以說是任何應(yīng)用至關(guān)重要的一部分。從社交網(wǎng)絡(luò)到一個(gè)簡單的Bug追蹤器,圖像都扮演著重要的角色。然而管理圖像并不是一件容易的事情,需要提前耗費(fèi)大量的時(shí)間精力去計(jì)劃。
本文演示了如何在Rail中實(shí)現(xiàn)這一目標(biāo)。如何處理你的圖像以及在后臺(tái)創(chuàng)建多個(gè)版本?如何通過壓縮圖像又不損圖像質(zhì)量,以此來提高頁面性能?這些且聽本文一一道來。
入門
本文教程是運(yùn)行于Rails 4.2,通過MongoDb數(shù)據(jù)庫和HAML呈現(xiàn)視圖。不過本文所展示的片段應(yīng)該兼容任何Rails版本(盡管有些配置差異)。
布置舞臺(tái)
ImageMagick是一套功能強(qiáng)大、穩(wěn)定而且開源的工具集和開發(fā)包,你可以通過包管理把它安裝在你的電腦上。
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
現(xiàn)在我們需要一個(gè)連接到本地ImageMagick庫的Ruby適配器。你可以使用MiniMagick,因?yàn)樗禽p量級(jí)的:
# Gemfile gem 'mini_magick'
MiniMagick的特性
在正式開始之前,讓我們先了解一下某些MiniMagick的特性,以避免不必要的錯(cuò)誤。
打開Rails控制臺(tái)(Rails c)并運(yùn)行以下代碼:
# 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
讓我們調(diào)整一下以適應(yīng)我們的iPad:
image.resize "2048x1536" # Now get the image's new width and height p "Width is => #{image.width} and height is => #{image.height}"
更改后的文件存儲(chǔ)在哪呢?
image.path # temp path
操縱圖像存儲(chǔ)到一個(gè)臨時(shí)的路徑有消失的危險(xiǎn)。所以要把它放到磁盤中,一個(gè)簡單的調(diào)用編寫方法如下:
image.write "public/uploads/test.jpg"
轉(zhuǎn)換圖像
或許你最常見的工作之一就是將圖像轉(zhuǎn)換成不同的格式。MiniMagick可以簡化這一過程:
image.format "png"image.write "public/uploads/test.png"
你還可以將多個(gè)操作放在同一模塊中:
image.combine_options do |i| i.resize "2048x1536" i.flip i.rotate "-45" i.blur "0x15"endimage.write "public/uploads/blur.png" 
至此,讓我們來看看如何將以上的這些與我們的Rails應(yīng)用聯(lián)系到一起。
上傳文件
Carrierwave簡化了在Ruby中上傳文件,同時(shí)它與MiniMagick交互的也很好。
# Gemfile gem 'carrierwave'gem 'carrierwave-mongoid', :require => 'carrierwave/mongoid'
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注