我想要一个图像和一个包含2个选项的组合框:颜色和黑白。当组合框选择发生变化时,我想将图像恢复为黑白图像并在服务器上动态完成(因此我不必将黑白图像存储在服务器上)。
我在想我可以将img标签指向像“/ images / blackandwhite / 120”这样的网址,其中120是彩色图片的图像ID,并让它动态地将图像转换为黑白并返回图像数据到浏览器。
这可能吗?我该怎么做?
答案 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"