Ruby on rails 获取图像尺寸
我使用carrierwave上传图像,我需要获得图像尺寸,并在上传时存储它们 CarrierWave有一个解决方案:Ruby on rails 获取图像尺寸,ruby-on-rails,imagemagick,carrierwave,minimagick,Ruby On Rails,Imagemagick,Carrierwave,Minimagick,我使用carrierwave上传图像,我需要获得图像尺寸,并在上传时存储它们 CarrierWave有一个解决方案: class ImageUploader零 2.4.1:002>Post.last.attachments.first.get_几何体 加载后(1.9ms)选择“posts”。*从“posts”中按“posts”排序。“id”DESC LIMIT$1[[“LIMIT”,1]] => [400, 200] Edit2 如果我使用下面的carrierwave建议,将这些val存储
class ImageUploader
虽然我可以看到如何在db字段中存储单个图像的高度和宽度,但我使用的是多文件上传器。
上载多个文件时如何存储这些图像尺寸
Edit1
class AttachmentUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
process resize_to_limit: [400, 400]
process :get_geometry
def geometry
@geometry
end
def get_geometry
if (@file)
@geometry = ::MiniMagick::Image.open(@file.file)[:dimensions]
end
end
end
2.4.1 :001 > Post.last.attachments.first.geometry
Post Load (2.8ms) SELECT "posts".* FROM "posts" ORDER BY "posts"."id" DESC LIMIT $1 [["LIMIT", 1]]
=> nil
2.4.1 :002 > Post.last.attachments.first.get_geometry
Post Load (1.9ms) SELECT "posts".* FROM "posts" ORDER BY "posts"."id" DESC LIMIT $1 [["LIMIT", 1]]
=> [400, 200]
类AttachmentUploaderclass ImageUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
process :store_dimensions
private
def store_dimensions
if file && model
model.width, model.height = ::MiniMagick::Image.open(file.file)[:dimensions]
end
end
end
class ImageUploader
你能根据型号的名称来做这样的事情吗
version :post do
process :resize_to_fit => [200, nil]
process :get_geometry
def geometry
@geometry
end
end
def get_geometry
if (@file)
img = ::Magick::Image::read(@file.file).first
@geometry = [ img.columns, img.rows ]
end
end
然后,您可以在“保存后”回调中读取图像的几何图形,并将其保存在模型中的自定义db行中。谢谢您的帮助。@geometry存储在何处,以便我可以访问其中的值?无法通过post.geometry访问?抱歉,我目前没有一个运行中的应用程序与carrierwave一起通过MySelf对其进行测试。carrierwave是否为模型提供了“后处理”回调,您可以访问get\u geometry方法并将值保存在db列中。(您必须首先创建db列。例如,一个序列化的属性或宽度和高度作为单独的列)或者在after_save回调->when width,height not set(宽度、高度未设置)中尝试,然后从self.get_geometry(获取几何体)获取信息?
version :post do
process :resize_to_fit => [200, nil]
process :get_geometry
def geometry
@geometry
end
end
def get_geometry
if (@file)
img = ::Magick::Image::read(@file.file).first
@geometry = [ img.columns, img.rows ]
end
end