代码之家  ›  专栏  ›  技术社区  ›  NotDan

如何请求图像并在rails中以黑白形式返回?

  •  0
  • NotDan  · 技术社区  · 14 年前

    我想有一个图像和两个选项组合框:颜色,黑色和白色。当组合框选择发生变化时,我希望返回黑白图像,并在服务器上动态执行此操作(因此我不必在服务器上存储黑白图像)。

    我想我可以将img标记指向一个url,比如“/images/blackandwhite/120”,其中120是彩色图片的图像id,并让它动态地将图像转换为黑白,然后将图像数据返回到浏览器。

    这可能吗?我该怎么做?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Toby Hede    14 年前

    存储图像的两个副本将比每次请求时处理图像要高效得多。

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

    filter:gray
    
        2
  •  0
  •   kikito    14 年前

    处理器不会做你想做的事情;当原始图像加载时,它们会“处理”一次图像。它们要求“处理过的”图像被永久存储。如果删除图像,它们不会重新创建;它们会引发异常。

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

    这里是 the relevant code 使缩略图)。如您所见,它只是调用“convert”(转换) Imagemagick

    这会给你指明正确的方向。例如:可以在模型中创建一个方法,在其中创建图像的黑白版本 /tmp/

    使用Imagemagick创建黑白图像有几个选项-例如,可以创建“真实”黑白(仅2种颜色)或灰度图像。 This forum post

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

    /images/blackandwhite/120
    

    考虑使用以下方法:

    /images/120?color=blackandwhite
    

    这样,您就不必添加额外的路由,并且您的控制器将更加安静。然后,在你的 show param[:color] "blackandwhite"