0

RoR で Carrierwave/Minimagick gem を使用して単純な画像アップローダを実装するのに問題があります。

アップロード時にファイルをグレースケールに変換しようとしていますが、エラーが発生します。コードは次のとおりです。

image_uploader.rb:

class ImageUploader < CarrierWave::Uploader::Base

  include CarrierWave::MiniMagick

  # Include the Sprockets helpers for Rails 3.1+ asset pipeline compatibility:
  include Sprockets::Helpers::RailsHelper
  include Sprockets::Helpers::IsolatedHelper

  storage :file

  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  # Process files as they are uploaded:
   process :convert_to_grayscale

  def convert_to_grayscale
    manipulate! do |img|
      img.quantize(256, Magick::GRAYColorspace)
      img = yield(img) if block_given?
      img
    end
  end

ファイルをアップロードしようとすると、次のエラーが表示されます。

uninitialized constant ImageUploader::Magick

app/uploaders/image_uploader.rb:36:in `block in convert_to_grayscale'
app/uploaders/image_uploader.rb:35:in `convert_to_grayscale'

これは Magick::GRAYColorspace 列挙定数によるものだと思います。これが機能しない理由はありますか?

4

1 に答える 1

1

manipulate画像をメモリにロードする機能ですか?画像リストを返しますか?

画像が正しく読み込まれていないと思います。問題は Magick 列挙型ではありません。

次に例を示します。

require 'RMagick'

clown = Magick::ImageList.new("clown.jpg")
clown = clown.quantize(256, Magick::GRAYColorspace)
clown.write('monochrome.jpg')
于 2013-01-30T14:40:18.053 に答える