2012-04-03 7 views
1

Ich muss überprüfen, ob die Bilder, die Leute auf meine Seite hochladen, die genaue Breite von 200px und die Höhe von 300px haben. Wenn sie diese Dimensionen nicht haben, sollten sie nicht in der Datenbank gespeichert werden.Wie kann Bildbreite und -höhe beim Upload mit Carrierwave, Mini Magick und Mongoid überprüft werden?

Ich habe seit Jahren mit Mini-Magick versucht und zahlreiche Tutorials, Beiträge zu Stack Overflow usw. durchgelaufen, aber ich kann keine funktionale Methode finden, dies zu tun.

Ich benutze Ruby 1.9.3 und Schienen 3.2.2, auf einem MongoDB läuft Mongoid.

Ich habe wirklich gehofft, Sie könnten mich in die richtige Richtung bringen.

Mein Bild Modell sieht wie folgt aus:

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 

Und mein carrierwave Modell sieht wie folgt aus:

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

In meiner Anwendung Ich akzeptiere alle Größen für das Bild, sondern automatisch die Größe vor – MikDiet

+1

Speicher Und ich weiß, wie das zu tun. Die Sache ist, dass ich das Bild brauche, das Leute hochladen, um eine genaue Breite und Höhe zu haben, also ist das keine Option. Es muss eines der Genies hier drin geben, die einen Hinweis haben ?! Es ist ziemlich überraschend, dass es in mini_magick keine eingebaute Lösung dafür gibt, wenn es Lösungen für alles andere gibt. –

Antwort

4

ich in der UserUploader etwas RMagick tun landete und die Benutzerklasse:

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 

Benutzerklasse

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 
Verwandte Themen