回形针:为啥尽管质量降低了,图像的大小却没有太大变化?

Posted

技术标签:

【中文标题】回形针:为啥尽管质量降低了,图像的大小却没有太大变化?【英文标题】:Paperclip: why, despite the reduction of quality, the size of an image does not change much?回形针:为什么尽管质量降低了,图像的大小却没有太大变化? 【发布时间】:2011-02-14 13:33:08 【问题描述】:

我正在运行 Ruby on Rails 3,我想使用 Paperclip 插件/gem 减小上传图像的大小(以字节为单位)。我需要它,因为我想提高与我的应用程序中网页加载时间相关的性能。

此时在我的模型文件中有:

  has_attached_file :avatar, 
    :styles      => 
      :small    => ["250x250#", :jpg] 
  
  :convert_options =>  :small => '-quality 40' 

这会将图像转换为.jpg 格式,设置尺寸并将质量降低到 40(此值仅用于测试)。

然而,我注意到的是,尽管质量有所下降,但文件的大小并没有太大变化。例如,我报告了使用和不使用选项:convert_options => :small => '-quality 40' 的图像大小:

# Without using the 'convert_options'
Image size: 57.35 kB (58730 bytes)

# Using the 'convert_options'
Image size: 55.25 kB (56576 bytes)

为什么差别这么小?在不损失太多质量的情况下减小尺寸的最佳做法是什么?


更新:也许,正如@Matt Gibson 评论这个问题所说的那样,对于压缩来说,“图像看起来的样子”(例如照片)也很重要。根据图像中的背景、颜色数量等,压缩似乎因图片而异。

【问题讨论】:

你的图片看起来是什么样的?它真的适合JPEG压缩,即摄影吗? @user502052 回复您的更新:好吧,至少您使用了正确的算法(例如,对于照片来说,JPEG 几乎总是比 GIF 或 PNG 更好),但正如您所观察到的,JPEG 压缩会有所不同相当多取决于输入的照片。一张简单的图片将比一张复杂的图片压缩得多。此外,这取决于您首先要压缩的图像类型——将 JPEG 重新编码为较小的 JPEG 不会给您带来很多好处。 JPEG 真正令人印象深刻的地方在于,与其他算法相比,它对原始、未压缩照片图像的压缩效果如何。 【参考方案1】:

您说您想改善网站的加载时间,所以让我提供一个替代解决方案。为什么不将您的图像卸载到像amazon s3(简单存储系统)这样的服务,以便他们可以为您提供图像?要真正加快速度,您可以使用amazon cloud front 之类的内容交付服务。与降低图像质量相比,这可能会大大加快您的网站速度。另一个好处是,当您开始时它会非常便宜(很可能是免费的),并且如果您最终需要它,您将来可以轻松扩展。

【讨论】:

【参考方案2】:

这些选项应该可以正常工作,也许您的图像压缩得不是很好。尝试使用命令工具 (see docs) 上的 convert 工具,看看有什么帮助。另外,it appears 那个回形针现在可以直接采用:quality 选项。

【讨论】:

【参考方案3】:

在为样式设置 convert_options (a.e. :small) 时,这可能是回形针的错误,请看issue

【讨论】:

以上是关于回形针:为啥尽管质量降低了,图像的大小却没有太大变化?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的图像对于 iPhone 来说太大了

Fabricjs HTML5 Canvas:为啥图像大小调整得这么差?

为啥尽管输入的值确实发生了变化,但 jquery 更改事件却没有触发? [复制]

回形针不调整图像大小或创建样式目录

为啥在 OpenCv 中调整图像大小会降低相机校准的重投影误差?

您如何将回形针设置为默认剪切而不是调整图像大小