Как я могу запросить изображение и вернуть его как черно-белое в рельсах? - PullRequest
0 голосов
/ 29 марта 2010

Я хотел бы иметь изображение и поле со списком с 2 вариантами: цветной и черно-белый. При изменении выбора в поле со списком я хотел бы вернуть изображение в черно-белом режиме и сделать это динамически на сервере (поэтому мне не нужно сохранять черно-белое изображение на сервере).

Я подумал, что могу указать тег img на URL-адресе, например "/ images / blackandwhite / 120", где 120 - это идентификатор изображения цветной картинки, и он будет динамически превращать изображение в черно-белое и возвращать изображение данные в браузер.

Возможно ли это? Как бы я это сделал?

Ответы [ 2 ]

2 голосов
/ 29 марта 2010

Хранение двух копий изображения будет гораздо более эффективным, чем обработка изображения при каждом запросе.

Однако, вы можете избежать использования фильтров изображений CSS:

filter:gray
0 голосов
/ 29 марта 2010

Скрепка по умолчанию подготовлена ​​для «изменения» изображений. Объекты, используемые для модификации изображений, называются «процессорами». Paperclip поставляется с одним процессором для создания миниатюр.

Процессоры не делают то, что вы хотите; они «обрабатывают» изображение «один раз», когда загружается исходное изображение. Они требуют, чтобы «обработанные» изображения были сохранены на постоянной основе. Если вы удалите изображения, они не воссоздают их; они бросают исключение.

Однако, взглянув на исходный код, вы сможете узнать, как делать то, что вы хотите.

Вот соответствующий код , который делает миниатюры). Как видите, он просто вызывает «convert» (команда Imagemagick ) с определенными параметрами.

Это должно указать вам правильное направление. Например: вы можете создать метод в вашей модели, который создает черно-белую версию вашего изображения внутри /tmp/, и, возможно, еще один метод для его удаления. Ваш контроллер должен вызвать первый, отправить изображение, а затем удалить файл.

Существует несколько вариантов создания черно-белых изображений с помощью Imagemagick - например, вы можете создавать «настоящие» черно-белые (только 2 цвета) или полутоновые изображения. В этом сообщении на форуме подробно описаны команды Imagemagick для нескольких параметров.

Наконец, предложение. Если вместо этого

/images/blackandwhite/120

Рассмотрите возможность использования этого:

/images/120?color=blackandwhite

Таким образом, вам не нужно будет добавлять дополнительные маршруты, и ваш контроллер будет более спокойным. Затем, на вашем show действии, вы просто должны проверить, равняется ли param[:color] "blackandwhite"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...