我需要检查用户上传到我网站的图片是否具有200px的准确宽度和300px的高度。如果他们没有这些维度,则不应将其保存在数据库中。
我已经尝试过使用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
我的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 :(得分:4)
我最终在UserUploader和User类中做了一些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
用户类
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