如何使Rails资产管道压缩图像?

6
我该如何让Rails资产管道对图像进行gzip压缩?它可以压缩CSS和JS文件,但无法压缩图像。 编辑 重新改写问题。最初是关于子文件夹的问题,但似乎Rails并没有对任何图像进行压缩。

1
你为什么想要对已经压缩过的文件再进行gzip压缩呢? - Chris Heald
@ChrisHeald,说得好。 - zeantsoi
2个回答

5

以下是来自Rails经典指南4.1.2节的内容:

当文件被预编译时,Sprockets还会创建您的资产的gzip(.gz)版本。

要预编译您的资产,请使用捆绑好的rake任务:

# from command line
RAILS_ENV=production bundle exec rake assets:precompile

更新:

在研究这个问题后,我想象中的是,虽然 Sprockets 压缩 JS 和 CSS 资源,但它没有压缩图片。然后我发现了这个 gem:sprockets-image_compressor

我自己没有实现过它,但它声称使用 pngcrushjpegoptim 提供图像资源的无损压缩。有趣的是,文档中声明如下:

如果环境没有安装 pngcrush 和/或 jpegoptim,则该 gem 将退回到与 gem 打包在一起的二进制文件。

再次强调,我自己没有使用过它,但如果它能够实现所声称的功能,那么它可能正是你需要的东西。


那真的没什么帮助。我知道它可以这样做。我想说的是,当我运行它时,它不会对子文件夹中的图像进行gzip压缩。 - Cristiano Betta
嗯,看起来它甚至没有压缩任何图像。 - Cristiano Betta
是的 - 这似乎是Sprockets的默认行为。我已经更新了我的答案,提供了一个潜在的解决方案。 - zeantsoi

1

它不会压缩任何图像,因为图像已经被压缩了(例如jpeg)。因此,它不需要用于节省流量的目的。

这意味着您无法使用任何现有设置进行此操作。


SVG图片怎么办?似乎没有办法使用资产管道对它们进行gzip压缩。 - Andriy B
谢谢!也许这是最好的方法,特别是当图像托管在云端(例如S3),并且没有办法使用Web浏览器动态压缩它们时。 - Andriy B
这实际上是非常错误的,你只需使用无损压缩算法就可以大大减小JPEG的大小。 - Francis Malloch
@FrancisMalloch 问题是Rails资源管道无法压缩图像。 - Mikhail Chuprynski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接