婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Ruby on Rails下的圖像處理入門教程

Ruby on Rails下的圖像處理入門教程

熱門標簽:淮安自動外呼系統(tǒng)供應商 巫師3地圖標注魔力之所 漯河電銷 AI電銷機器人 線路 中牟外呼系統(tǒng)違法嗎 征服者企業(yè)地圖標注 外呼線路從哪里出來的 柯城手機地圖如何做地圖標注 天津外呼系統(tǒng)怎么收費

圖像可以說是任何應用至關重要的一部分。從社交網(wǎng)絡到一個簡單的Bug追蹤器,圖像都扮演著重要的角色。然而管理圖像并不是一件容易的事情,需要提前耗費大量的時間精力去計劃。

本文演示了如何在Rail中實現(xiàn)這一目標。如何處理你的圖像以及在后臺創(chuàng)建多個版本?如何通過壓縮圖像又不損圖像質(zhì)量,以此來提高頁面性能?這些且聽本文一一道來。
入門

本文教程是運行于Rails 4.2,通過MongoDb數(shù)據(jù)庫和HAML呈現(xiàn)視圖。不過本文所展示的片段應該兼容任何Rails版本(盡管有些配置差異)。

布置舞臺

ImageMagick是一套功能強大、穩(wěn)定而且開源的工具集和開發(fā)包,你可以通過包管理把它安裝在你的電腦上。

Ubuntu上:

sudo apt-get -y install imagemagick
sudo apt-get -y install libmagic-dev
sudo apt-get -y install libmagickwand-dev

Mac OS X上,建議使用自制程序:

brew install imagemagick

現(xiàn)在我們需要一個連接到本地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 width
image.width # 4928
 
# Get the image's height
image.height #3264

讓我們調(diào)整一下以適應我們的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

操縱圖像存儲到一個臨時的路徑有消失的危險。所以要把它放到磁盤中,一個簡單的調(diào)用編寫方法如下:

image.write "public/uploads/test.jpg"

轉(zhuǎn)換圖像

或許你最常見的工作之一就是將圖像轉(zhuǎn)換成不同的格式。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"
end
image.write "public/uploads/blur.png"
 
![Some weird result](blur.png)

至此,讓我們來看看如何將以上的這些與我們的Rails應用聯(lián)系到一起。
上傳文件

Carrierwave簡化了在Ruby中上傳文件,同時它與MiniMagick交互的也很好。

# Gemfile
 
gem 'carrierwave'
gem 'carrierwave-mongoid', :require => 'carrierwave/mongoid'

注意:如果你是在ActiveRecord或DataMapper上,配置會稍微不同。Carrierwave官方文檔介紹了正確的方法,點此進入。

獲取:

bundle install

創(chuàng)建第一個上傳:

#app/uploaders/image_uploader.rb
 
class ImageUploader  CarrierWave::Uploader::Base
 # Include RMagick or MiniMagick support:
 include CarrierWave::MiniMagick
 
 # Choose what kind of storage to use for this Uploader:
 storage :file
 # Override the directory where uploaded files will be stored.
 # This is a sensible default for uploaders that are meant to be mounted:
 def store_dir
  "uploads/images"
 end
end

這段代碼是自說明,storage :file指示服務器將圖像存儲在本地服務器上,store_dir指定位置。

自從文件通過互聯(lián)網(wǎng)傳送,總會過濾傳入的文件:

# app/uploaders/image_uploader.rb
...
# Add a white list of extensions which are allowed to be uploaded.
# For images you might use something like this:
def extension_white_list
 %w(jpg jpeg png gif)
end
...

將這種上傳置入我們的圖像模型:

# app/models/image.rb
 
class Image
 include Mongoid::Document
 include Mongoid::Timestamps
 include Mongoid::Paranoia
 include Mongoid::Attributes::Dynamic
 include Rails.application.routes.url_helpers
 
 mount_uploader :media, ImageUploader, mount_on: :media_filename
end

編輯image_uploader.rb來處理上傳的圖像:

# app/uploaders/image_uploader.rb
 
#.....
process :resize_to_fill => [200, 200]
process :convert => 'png'
#.....

嘗試從Rails控制臺創(chuàng)建一個新的圖像:

media = File.open("/Users/test/Desktop/image/jpg")
img = Image.new(:media => media)
img.save

上傳圖像在store_dir下是可用的。然而上傳的圖像是立即被處理的,并被200×200的圖像覆蓋。我們沒有原始文件的副本留作以后編輯。所以為避免這種情況,我們需要創(chuàng)建多個版本的文件。

# app/uploaders/image_uploader.rb
 
#.....
version :thumb do
 process :resize_to_fit => [100, 100]
 process :convert => 'jpg'
end
 
version :cover  do
 process :resize_to_fit => [240, 180]
 process :convert => 'jpg'
end
 
#.....

下面顯示的是上段代碼創(chuàng)建兩個版本,檢查版本由Carrierwave創(chuàng)建:

img.media.versions[:thumb] # returns the thumb image instance
img.media.versions[:cover] # returns the cover image instance

你注意到這些圖像是瞬間生成的嗎?這意味著圖像轉(zhuǎn)換發(fā)生在同一線程中,并且執(zhí)行是被阻塞的,直到完成為止。在生產(chǎn)應用中,在同一線程里創(chuàng)建一個圖像的多個版本是不受歡迎的。相反,我們應該有條件的處理這種情況。

# app/uploaders/image_uploader/rb
 
#....
version :cover, :if => :is_live? do
 process :resize_to_fit => [240, 180]
 process :convert => 'jpg'
end
 
def is_live?(img = nil)
 @is_live
end
 
def is_live=(value)
 @is_live = value
end
#....

這樣,當我們創(chuàng)建一個新的圖像時,副本將不會生成。我們可以在需要的時候手動去觸發(fā),運行如下代碼:

img.media.is_live = true
img.save
img.media.recreate_versions! :cover

這代碼也是運行于前臺,是一個阻塞操作,但至少可以盡可能的推遲到最后一刻。我們可以通過Resque在后臺進一步的運行:

# lib/resque/image_queue.rb
class ImageQueue
 @queue = :image_queue
 def self.perform(image_id)
  image = Image.find image_id
  img.media.is_live= true
  img.save
  img.media.recreate_versions! :cover
 end
end

然后,列隊:

Resque.enqueue(ImageQueue, img.id.to_s)

性能提升

圖像是厚重的,往往會減慢網(wǎng)站。減少頁面負擔的一種方法是壓縮這些圖像。Carrierwave圖像優(yōu)化器可以幫助我們飛速的壓縮圖像。

將下面這段添加到Gemfile:

gem 'carrierwave-imageoptimizer'

然后編輯image_uploader:

# app/uploaders/image_uploader.rd
 
#.....
 
include CarrierWave::ImageOptimizer
process :optimize
process :quality => 100
#....

如此壓縮不會有視覺喪失。

圖像處理是一個巨大的垂直,我們幾乎只觸及表面。我們可以建立很多很酷的東西。如果您對這篇文章感興趣,請在評論中分享您的想法。

您可能感興趣的文章:
  • 快速安裝Ruby on Rails的簡明指南
  • win7安裝ruby on rails開發(fā)環(huán)境
  • 在 Ubuntu 12.04 Server 上安裝部署 Ruby on Rails 應用
  • Windows下Ruby on Rails開發(fā)環(huán)境安裝配置圖文教程
  • Ruby On Rails上手筆記(安裝使用全過程)
  • CentOS7下搭建ruby on rails開發(fā)環(huán)境
  • 幾個加速Ruby on Rails的編程技巧
  • Ruby on rails安裝后去掉DL is deprecated,please use Fiddle警告信息的方法【測試可用】

標簽:克拉瑪依 南昌 內(nèi)江 甘孜 棗莊 河池 大慶 西雙版納

巨人網(wǎng)絡通訊聲明:本文標題《Ruby on Rails下的圖像處理入門教程》,本文關鍵詞  Ruby,Rails,下,的,圖像處理,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權(quán)與本站無關。
  • 相關文章
  • 下面列出與本文章《Ruby on Rails下的圖像處理入門教程》相關的同類信息!
  • 本頁收集關于Ruby on Rails下的圖像處理入門教程的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美成人三级在线| 国产盗摄视频一区二区三区| 国产日韩三级在线| 欧美精品一区二区三区在线播放| 欧美日韩国产经典色站一区二区三区 | 国产精品一二一区| 久久狠狠亚洲综合| 免费高清在线一区| 理论电影国产精品| 精品午夜一区二区三区在线观看| 奇米影视一区二区三区小说| 麻豆成人av在线| 国产老妇另类xxxxx| 成人高清视频在线| 色久优优欧美色久优优| 成人av在线观| 色综合一区二区| 欧美精品第1页| 久久理论电影网| 亚洲国产精品ⅴa在线观看| 国产精品色婷婷| 一区二区高清在线| 青草国产精品久久久久久| 国产麻豆一精品一av一免费| 成人丝袜高跟foot| 色婷婷精品久久二区二区蜜臂av| 欧美性大战久久久久久久蜜臀| 欧美日韩国产123区| 日韩欧美在线不卡| 中文字幕免费观看一区| 亚洲午夜激情网站| 麻豆成人久久精品二区三区小说| 北条麻妃国产九九精品视频| 7878成人国产在线观看| 久久久久久久久久久久久久久99 | 精品国产一二三区| 国产日韩欧美a| 亚洲va国产天堂va久久en| 久久爱www久久做| 色婷婷综合久久久| 欧美mv日韩mv亚洲| 一区二区在线观看不卡| 久久国产婷婷国产香蕉| 99久久国产综合精品女不卡| 欧美一级生活片| 亚洲精品欧美综合四区| 麻豆精品在线播放| 在线免费亚洲电影| 国产精品高潮呻吟| 激情欧美日韩一区二区| 91在线无精精品入口| 精品粉嫩超白一线天av| 亚洲高清一区二区三区| 成人福利视频在线| 久久伊人蜜桃av一区二区| 亚洲午夜久久久久久久久电影网 | 久久综合九色综合97_久久久| 日韩理论电影院| 国产在线国偷精品免费看| 在线免费一区三区| 亚洲欧美另类综合偷拍| 国产成人超碰人人澡人人澡| 日韩一区二区在线免费观看| 性感美女极品91精品| caoporen国产精品视频| 国产精品视频第一区| 国产91丝袜在线播放| 国产欧美日韩一区二区三区在线观看| 蜜臀av性久久久久av蜜臀妖精| 欧美日本一区二区| 丝袜诱惑制服诱惑色一区在线观看| 91在线porny国产在线看| 国产精品另类一区| 国产a久久麻豆| 国产午夜亚洲精品不卡| 国产成人8x视频一区二区| 久久久久久久久久久黄色| 久久se精品一区精品二区| 欧美成人免费网站| 国产剧情一区在线| 国产精品美女久久久久久久久久久| 国产成人av资源| 国产精品国产三级国产aⅴ中文 | 欧美久久久久久蜜桃| 天天色天天操综合| 欧美成人一区二区三区片免费| 美女视频免费一区| 久久视频一区二区| av中文字幕在线不卡| 亚洲综合色在线| 欧美一区二区三区色| 久久se精品一区精品二区| 久久久综合激的五月天| 成人免费看视频| 亚洲一区二区三区视频在线 | 欧美亚洲动漫制服丝袜| 婷婷成人激情在线网| 日韩精品在线一区| 国产成+人+日韩+欧美+亚洲| 日韩美女久久久| 91精品婷婷国产综合久久竹菊| 精品一区二区三区在线播放 | 色老头久久综合| 亚洲综合在线第一页| 91精品欧美久久久久久动漫| 亚洲视频狠狠干| 欧美精品日韩一本| 欧美日韩一区二区三区视频| 色哟哟一区二区| 色综合色狠狠综合色| 成人av免费在线| www.日韩精品| jlzzjlzz亚洲日本少妇| eeuss鲁片一区二区三区在线观看| 国产精品白丝jk黑袜喷水| 国内精品国产成人国产三级粉色| 精品一区二区三区在线视频| 蜜臀久久99精品久久久久久9| 青青草原综合久久大伊人精品优势| 午夜精品在线看| 日一区二区三区| 久久aⅴ国产欧美74aaa| 国内外成人在线| 丁香婷婷综合色啪| 91在线一区二区三区| av资源网一区| 欧美视频中文字幕| 7777精品伊人久久久大香线蕉 | 午夜在线电影亚洲一区| 天堂影院一区二区| 裸体歌舞表演一区二区| 国产精品性做久久久久久| 国产成人8x视频一区二区| av福利精品导航| 一本大道久久a久久精品综合| 欧美亚洲动漫另类| 日韩精品一区二区三区三区免费 | 欧美一区二区女人| 久久久久久久久久久黄色| 中文字幕在线不卡国产视频| 亚洲一区日韩精品中文字幕| 日本sm残虐另类| 国产在线精品一区在线观看麻豆| aaa国产一区| 欧美日韩你懂得| 久久精品欧美日韩| 亚洲成人中文在线| 国产一区二区网址| 色94色欧美sute亚洲线路一久| 91精品国产综合久久久久久漫画| 久久精品日产第一区二区三区高清版 | 国产成人精品亚洲777人妖| 国模无码大尺度一区二区三区| 午夜视频在线观看一区二区| 亚洲成av人综合在线观看| 午夜视频在线观看一区| 婷婷夜色潮精品综合在线| 日本特黄久久久高潮| 久久精品国产一区二区三区免费看| 奇米色一区二区| 蜜桃免费网站一区二区三区| 久久99国产精品免费| 国产成人综合亚洲网站| 99re热视频这里只精品| 在线免费观看成人短视频| 欧美老女人第四色| 精品国一区二区三区| 久久久精品国产99久久精品芒果| 国产欧美一区在线| 一区二区三区精品在线| 免费成人在线播放| 国产一区二区精品久久91| 99久久精品国产导航| 欧美日韩小视频| 精品理论电影在线观看| www国产精品av| 亚洲色图19p| 热久久一区二区| 国产白丝网站精品污在线入口| 色综合天天综合网天天看片| 884aa四虎影成人精品一区| 2022国产精品视频| 中文字幕一区日韩精品欧美| 午夜不卡在线视频| 国产成人日日夜夜| 欧美人妇做爰xxxⅹ性高电影 | www..com久久爱| 欧美二区乱c少妇| 久久精品人人做人人爽人人| 亚洲综合激情网| 国产精品中文有码| 欧美日韩免费一区二区三区视频| 久久尤物电影视频在线观看| 一区二区三区影院| 高清不卡在线观看| 69p69国产精品| 亚洲视频香蕉人妖| 国产麻豆成人精品| 91麻豆精品国产综合久久久久久 | 欧美韩国日本不卡|