I want to use specific version of image by their width and height. So I followed How-to:-Get-image-dimensions this wiki, but got undefined method "width="
.
My uploader looks like,
class S3uploaderUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
# Include RMagick or MiniMagick support:
# include CarrierWave::RMagick
# include CarrierWave::MiniMagick
process :store_dimensions
# Choose what kind of storage to use for this uploader:
# storage :file
storage :fog
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
version :detail do
process :quality => 90
process :store_dimensions
end
version :mainVertical do
process :quality => 80
process :store_dimensions
process :resize_to_fit => [240, 180]
end
version :mainHorizontal do
process :quality => 80
process :store_dimensions
process :resize_to_fit => [240, 320]
end
private
def store_dimensions
if file && model
model.width, model.height = ::MiniMagick::Image.open(file.file)[:dimensions]
end
end
end
What am I missing? Any suggestions? Thanks.
I got an idea from this post. conditional-image-resizing-with-carrierwave. It works well.
And I changed my code like this.
class S3uploaderUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
storage :fog
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
version :detail do
process :quality => 90
end
version :main, :if => :image? do
process :quality => 90
process :resize_to_fit => [240, 180] ,:if => :horizontal?
process :resize_to_fit => [240, 320] ,:if => :vertical?
end
def image?(new_file)
self.file.content_type.include? 'image'
end
def horizontal?(new_file)
image = MiniMagick::Image.open(self.file.file)
true if image[:height] < image[:width]
end
def vertical?(new_file)
image = MiniMagick::Image.open(self.file.file)
true if image[:height] > image[:width]
end
end