1

我需要检查人们上传到我网站的图像是否具有 200 像素的确切宽度和 300 像素的高度。如果他们没有这些维度,则不应将它们保存在数据库中。

我已经用 mini-magick 尝试了很长时间,并浏览了许多教程、Stack Overflow 上的帖子等,但我找不到这样做的实用方法。

我在运行 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

我的载波模型如下所示:

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
4

1 回答 1

3

我最终在 UserUploader 和 User 类中做了一些 RMagick:

用户上传者:

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

用户类

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
于 2012-04-08T14:03:00.547 回答