0

У меня возникли проблемы с реализацией простого загрузчика изображений с камнями Carrierwave/Minimagick в RoR.Carrierwave/Minimagick не обрабатывает изображения после загрузки

Я пытаюсь преобразовать файл в оттенки серого при загрузке, но я получаю сообщение об ошибке. Вот код:

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 :: GREYColorspace enum constant. Любые идеи, почему это не работает?

ответ

1

Функция manipulate, которая загружает изображения в память? Он возвращает список изображений?

Я думаю, что изображения загружены неправильно. Проблема не в перечислении Магии.

Вот пример пример:

require 'RMagick' 

clown = Magick::ImageList.new("clown.jpg") 
clown = clown.quantize(256, Magick::GRAYColorspace) 
clown.write('monochrome.jpg') 
+0

Вот что документация carrierwave говорит о манипуляции():! ** манипулировать() ** Манипулирование изображение с RMagick. Этот метод загрузит изображение, а затем передаст каждый из его кадров в поставляемый блок. Затем он сохранит изображение на диск. Gotcha Этот метод предполагает, что объект отвечает на current_path. Любой класс, в который этот модуль смешивается, должен иметь метод current_path. CarrierWave :: Uploader, так что вам не придется беспокоиться об этом в большинстве случаев. Урожайность MiniMagick :: Изображение манипуляции для выполнения Поднимает CarrierWave :: ProcessingError если манипуляция не удалось. – diego

Смежные вопросы