【问题标题】:Minimagick undefined method `width='Minimagick 未定义方法 `width='
【发布时间】:2016-01-06 10:07:10
【问题描述】:

我想通过图像的宽度和高度来使用特定版本的图像。所以我关注了How-to:-Get-image-dimensions 这个wiki,但得到了undefined method "width="。 我的上传者看起来像,

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

我错过了什么?有什么建议么?谢谢。

【问题讨论】:

    标签: amazon-s3 carrierwave minimagick


    【解决方案1】:

    我从这篇文章中得到了一个想法。 conditional-image-resizing-with-carrierwave。效果很好。

    我像这样更改了我的代码。

    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
    

    【讨论】:

      猜你喜欢
      • 2013-12-26
      • 2014-01-30
      • 2015-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-17
      • 2021-03-31
      相关资源
      最近更新 更多