Скрепка по умолчанию подготовлена для «изменения» изображений. Объекты, используемые для модификации изображений, называются «процессорами». Paperclip поставляется с одним процессором для создания миниатюр.
Процессоры не делают то, что вы хотите; они «обрабатывают» изображение «один раз», когда загружается исходное изображение. Они требуют, чтобы «обработанные» изображения были сохранены на постоянной основе. Если вы удалите изображения, они не воссоздают их; они бросают исключение.
Однако, взглянув на исходный код, вы сможете узнать, как делать то, что вы хотите.
Вот соответствующий код , который делает миниатюры). Как видите, он просто вызывает «convert» (команда Imagemagick ) с определенными параметрами.
Это должно указать вам правильное направление. Например: вы можете создать метод в вашей модели, который создает черно-белую версию вашего изображения внутри /tmp/
, и, возможно, еще один метод для его удаления. Ваш контроллер должен вызвать первый, отправить изображение, а затем удалить файл.
Существует несколько вариантов создания черно-белых изображений с помощью Imagemagick - например, вы можете создавать «настоящие» черно-белые (только 2 цвета) или полутоновые изображения. В этом сообщении на форуме подробно описаны команды Imagemagick для нескольких параметров.
Наконец, предложение. Если вместо этого
/images/blackandwhite/120
Рассмотрите возможность использования этого:
/images/120?color=blackandwhite
Таким образом, вам не нужно будет добавлять дополнительные маршруты, и ваш контроллер будет более спокойным. Затем, на вашем show
действии, вы просто должны проверить, равняется ли param[:color]
"blackandwhite"