Ruby on rails 使用RMagick计算缩略图大小

Ruby on rails 使用RMagick计算缩略图大小,ruby-on-rails,rmagick,Ruby On Rails,Rmagick,我正在使用附件和RMagick在rails应用程序上上传/调整图像大小。目前我使用本地文件系统作为存储,但我计划使用AWS S3来完成这项工作。无论如何,我很想知道其他人在使用S3方面的经验,我还有一个大问题要问你。在我的应用程序中,当用户上传图像时,我将该图像调整为5种不同的大小,并与原始图像一起存储。(共6幅图像)基于模型中提供的缩略图大小: :thumbnails => { "thumb" => "120x80",

我正在使用附件和RMagick在rails应用程序上上传/调整图像大小。目前我使用本地文件系统作为存储,但我计划使用AWS S3来完成这项工作。无论如何,我很想知道其他人在使用S3方面的经验,我还有一个大问题要问你。在我的应用程序中,当用户上传图像时,我将该图像调整为5种不同的大小,并与原始图像一起存储。(共6幅图像)基于模型中提供的缩略图大小:

 :thumbnails => { 
                 "thumb" => "120x80",
                  "extra_small"=>"480x320",
                  "small"=>"640x480", 
                  "medium" => "800x533",
                  "large"=>"2738x1825", 
                  "extra_large" => "3464x2309" 
最后我得到:

  • image_foo.jpg(原始图像)
  • image_foo_thumb.jpg
  • image_foo_extra_small.jpg
  • image_foo_small.jpg
  • image_foo_medium.jpg
  • image_foo_large.jpg
  • image_foo_extra_large.jpg
我之所以重新调整这些图像的大小,是因为我需要将每个图像的实际大小存储在数据库中。但实际上,即使我指定了缩略图的尺寸,我也没有得到确切的尺寸。不管怎样,这是可以的,因为尺寸是根据纵横比计算的


但是如果我可以计算缩略图的大小而不将其保存到文件系统中,我真的不想浪费服务器上的空间。换句话说,我只需要存储原始文件而不是缩略图,但我仍然需要获取缩略图的大小。是否可以在不在RMagick中创建缩略图的情况下获取实际缩略图大小

S3上的空间相对便宜。所以我不会太担心。 但是,您可以考虑将图像转换为较小的大小。您可以保留small和extra-small,并使用HTMLIMG标记的宽度和高度属性。但是,这将使您的侧载速度变慢,并导致更多流量

我想你真正想要的是一个解决方案,当文件被请求时,它可以动态地转换文件,对吗?我不确定是否有现成的解决方案。然而,这将是一个重大的性能吸吮


因此,我的建议是坚持使用所有不同的尺码,并向亚马逊多支付几美分。这将产生最佳性能,并且最容易维护。您不必担心可扩展性,而且存储越来越便宜这一事实也适用于此解决方案。

S3确实非常便宜,我们在这里讨论的JPG应该在KB范围内,而不是MB或GB。如果你担心的话,正如amurmann提到的,选择所需尺寸的子集将非常有效-允许浏览器调整到所需的精确像素尺寸。谢谢大家。这是一个面向摄影师的库存图像应用程序,因此大多数图像都是高分辨率图像。我知道S3是最好的解决方案,我很乐意坚持下去。首先,我考虑只在S3上存储原始图像,并为每个使用请求生成和下载重新调整大小的图像版本。但当我使用ImageMagick时,这将消耗更多的服务器内存。正如您所建议的,最好一次重新调整它们的大小,然后存储在S3中。