如何请求图像并将其作为黑白色在轨道中返回?

时间:2010-03-28 22:55:05

标签: ruby-on-rails

我想要一个图像和一个包含2个选项的组合框:颜色和黑白。当组合框选择发生变化时,我想将图像恢复为黑白图像并在服务器上动态完成(因此我不必将黑白图像存储在服务器上)。

我在想我可以将img标签指向像“/ images / blackandwhite / 120”这样的网址,其中120是彩色图片的图像ID,并让它动态地将图像转换为黑白并返回图像数据到浏览器。

这可能吗?我该怎么做?

2 个答案:

答案 0 :(得分:1)

存储两个图像副本将比每次请求时处理图像更有效。

但是,您可以使用CSS图像过滤器:

filter:gray

答案 1 :(得分:0)

默认情况下,Paperclip准备“改变”图像。用于修改图像的对象称为“处理器”。 Paperclip只配备一个处理器,用于制作缩略图。

处理器不能做你想做的事;当加载原始图像时,它们“处理”图像“一次”。它们需要永久存储“已处理”的图像。如果删除图像,则不会重新创建图像;他们抛出异常。

但是,通过查看源代码,您可以了解如何做您想做的事。

这是制作缩略图的the relevant code。如您所见,它只是使用某些参数调用“convert”(Imagemagick命令)。

这应该指向正确的方向。例如:您可以在模型中创建一个方法,在/tmp/内创建图像的黑白版本,也可以在另一个方法中删除它。您的控制器必须调用前者,发送图像,然后删除文件。

使用Imagemagick创建黑白图像有多种选择 - 例如,您可以创建“真实”黑白(仅限2种颜色)或灰度图像。 This forum post详细介绍了几个选项的Imagemagick命令。

最后,一个建议。如果不是这个

/images/blackandwhite/120

考虑使用:

/images/120?color=blackandwhite

这样,您不必添加其他路线,您的控制器将更加安静。然后,在show操作中,您只需检查param[:color]是否等于"blackandwhite"