Ruby on rails 如果图像超过高度/宽度,请使用carrierwave调整图像大小

Ruby on rails 如果图像超过高度/宽度,请使用carrierwave调整图像大小,ruby-on-rails,carrierwave,minimagick,Ruby On Rails,Carrierwave,Minimagick,我环顾四周,在我尝试自己做这件事之后,找不到解决办法。当用户上传照片时,如果超过了我的最小和最大尺寸,我希望他们能够调整大小。然而,我想要两个条件。从侧面(东/西)拍摄的照片应保持在我设置的尺寸范围内,对于从高处(北/南)拍摄的照片,也应保持相同的尺寸 例如,一个用户上传了一张照片,照片的尺寸是3264x1840。上载的大小应调整为适合584x329。如果上载小于584x329,则不会调整大小 另一个例子是,如果用户上传一张照片,照片的尺寸是2448 x 3264。上载的大小应调整为适合247x

我环顾四周,在我尝试自己做这件事之后,找不到解决办法。当用户上传照片时,如果超过了我的最小和最大尺寸,我希望他们能够调整大小。然而,我想要两个条件。从侧面(东/西)拍摄的照片应保持在我设置的尺寸范围内,对于从高处(北/南)拍摄的照片,也应保持相同的尺寸

例如,一个用户上传了一张照片,照片的尺寸是3264x1840。上载的大小应调整为适合584x329。如果上载小于584x329,则不会调整大小

另一个例子是,如果用户上传一张照片,照片的尺寸是2448 x 3264。上载的大小应调整为适合247x329

我试图使用MiniMagick,因为我相信这是必要的。如果我只能使用CarrierWave,那就太完美了,但我认为Minimagik应该用于调整照片大小

我收到的错误是#的“undefined method
resize”,它指向控制器中def create的
@photo=photo.new(params[:photo])

顺便说一句,尺寸很高,因为这些通常是你上传照片时手机的默认尺寸

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
class ImageUploader[584329]
def调整大小至限制(宽度、高度)
操纵do | img|
img.resize“#{width}x#{height}>”
img=如果给定块,产量(img)?
img
结束
结束
#创建上载文件的不同版本:
版本:thumb do
处理:将_调整为_限制=>[200200]
结束
结束
照片控制器:

  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
def创建
@照片=照片。新建(参数[:照片])
@photo.user=当前用户
如果@photo.save
flash[:notice]=“已成功创建照片。”
重定向到:返回
其他的
呈现:操作=>“新建”
结束
结束
def调整大小(宽度、高度、重力=‘中心’)
操纵do | img|
img.combine_选项do| cmd|
cmd.resize“#{width}”
如果img[:宽度]
更改
:在图像上载程序中调整大小
过程:调整大小至适合=>[584329]