Я огляделся и не смог найти решение после того, как попытался сделать это самостоятельно. Когда пользователи загружают фотографии, я хочу, чтобы их размер изменялся, если они превышают мои минимальные и максимальные размеры. Однако я хотел бы два условных. Фотографии, сделанные сбоку (восток/запад), должны оставаться в установленных мною размерах, и то же самое следует для фотографий, сделанных вертикально (север/юг).
Например, пользователь загружает фотографию, стоящую далеко и имеющую размер 3264x1840. Загружаемый файл должен быть изменен до размера 584x329. Если загружаемый файл меньше 584x329, размер не изменится.
Другой пример: пользователь загружает фотографию, сделанную в полный рост и имеющую размеры 2448 x 3264. Размер загрузки должен быть изменен, чтобы соответствовать 247 x 329.
Я пытался использовать MiniMagick с этим, так как считаю, что это будет требованием. Если я могу использовать только CarrierWave, то это прекрасно, но я думал, что MiniMagick должен был использоваться для изменения размера фотографий.
Я получаю сообщение об ошибке: «неопределенный метод resize' for #<ImageUploader:0x007f8606feb9b8>' and it points to
@photo = Photo.new(params[:photo])» из def create в контроллере.
Размеры BTW высоки, потому что обычно это размеры вашего телефона по умолчанию, когда вы загружаете фотографию.
image_uploader.rb:
class ImageUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
storage :file
# storage :fog
# Override the directory where uploaded files will be stored.
# This is a sensible default for uploaders that are meant to be mounted:
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
process :resize => [584, 329]
def resize_to_limit(width, height)
manipulate! do |img|
img.resize "#{width}x#{height}>"
img = yield(img) if block_given?
img
end
end
# Create different versions of your uploaded files:
version :thumb do
process :resize_to_limit => [200, 200]
end
end
Контроллер фотографий:
def create
@photo = Photo.new(params[:photo])
@photo.user = current_user
if @photo.save
flash[:notice] = "Successfully created photos."
redirect_to :back
else
render :action => 'new'
end
end
def resize(width, height, gravity = 'Center')
manipulate! do |img|
img.combine_options do |cmd|
cmd.resize "#{width}"
if img[:width] < img[:height]
cmd.gravity gravity
cmd.background "rgba(255,255,255,0.0)"
cmd.extent "#{width}x#{height}"
end
end
img = yield(img) if block_given?
img
end
end