2012-04-03 26 views
1

我需要檢查人們上傳到我網站的圖片是否具有200px的精確寬度和300px的高度。如果他們沒有這些尺寸,他們不應該保存在數據庫中。如何使用carrierwave,mini magick和mongoid驗證圖片的寬度和高度?

我已經嘗試過迷你magick的年齡,並通過了無數的教程,堆棧溢出等的帖子,但我找不到這樣做的功能方式。

我在運行mongoid的mongoDB上使用ruby 1.9.3和rails 3.2.2。

真的希望你能把我放在正確的方向。

我的圖像模型是這樣的:

class Flow 
    include Mongoid::Document 
    include Mongoid::Taggable 
    include Mongoid::Timestamps 
    include Mongo::Voteable 
    voteable self, :up => +1, :down => -1 

    attr_accessible :image, :remote_image_url, :tags 

    mount_uploader :image, UserUploader 

    belongs_to :user 

    field :shot, :type => String 
    field :remote_image_url, :type => String 
    field :tags, type: Array 
end 

而且我carrierwave模式是這樣的:

class UserUploader < CarrierWave::Uploader::Base 
    include CarrierWave::MiniMagick 

    storage :fog 

    def store_dir 
     "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
    end 

    def extension_white_list 
     %w(jpg jpeg png gif) 
    end 
end 
+0

在我的應用程序接受圖像的任何尺寸,但自動保存 – MikDiet 2012-04-03 18:00:14

+1

調整之前,我知道該怎麼做。事情是,我需要人們上傳的圖像是一個確切的寬度和高度,所以這不是一個選項。這裏的天才必須有線索?!在mini_magick中沒有針對此解決方案的內置解決方案是非常令人驚訝的,因爲在其他解決方案中都有構建解決方案。 – 2012-04-03 18:40:15

回答

4

我結束了做一些RMagick在UserUploader和用戶等級:

用戶上傳器:

process :get_geometry 
def geometry 
    @geometry 
end 

def get_geometry 
    if (@file) 
     img = ::Magick::Image::read(@file.file).first 
     @geometry = [ img.columns, img.rows ] 
    end 
end 

User類

validate :validate_minimum_image_size 

def validate_minimum_image_size 
    geometry = self.image.geometry 
    if (! geometry.nil?) 
     self.width = geometry[0] 
     self.height = geometry[1] 
    end 
    unless (self.width == 320 && self.height == 480) || (self.width == 640 && self.height == 960) 
     errors.add :base, "Naughty you... iPhone designs should be 320px x 480px or 640px x 960px." 
    end 
end 
相關問題