Rails - 如何从S3获取图像,调整大小并将缩略图保存到S3?

时间:2013-10-07 10:39:22

标签: ruby-on-rails ruby image amazon-s3 resize

我们有很多图像存储在Amazon S3存储桶中,我们需要调整它们的大小。因此,我们需要抓取存储桶中的所有图像并逐个调整大小(根据其方向)。 最好的方法是什么?只写一个ruby脚本或者有什么方法可以做到吗?

由于

2 个答案:

答案 0 :(得分:2)

过去,我在工人类中使用了aws-sdk-ruby gemrmagick的组合:

  • 从本地S3下载原始文件
  • 适用auto_orient
  • 调整x / y / z
  • 的大小
  • 将原始版本和新版本重新上传至S3

每当您收到未来图片时,您都可以在后台(delayed_job / sideqik / resque / etc)排队这样的过程。

这是gist

答案 1 :(得分:1)

也可以使用简单的shell脚本(带一些外部帮助)

安装s3cmd。它是与s3交互的命令行工具。 安装ImageMagick。这就是rMagic在引擎盖下使用的方法

然后在像这样的shell脚本中使用它

#!/bin/bash
S3CMD=$(which s3cmd)
CONVERT=$(which convert)
#
# Download the file from s3
$S3CMD get s3://mybucket/path/to/image/file.gif

# convert it to thumbnail
$CONVERT file.gif    -resize 64x64  resize_file.gif

# upload the thumbnail back to s3
$S3CMD put resize_file.git s3://mybucket/path/to/thumbnails/resize_file.gif

# cleanup
rm file.gif resize_file.gif

注意:上面的示例脚本没有任何错误检查。在执行下一个命令之前,应检查每个命令的状态代码。

ImageMagick非常强大。

see this以各种方式使用调整图片大小。

您还可以制作缩略图like this

s3cmd能够从s3路径下载所有文件。 ImageMagick能够进行批处理(尽管示例脚本没有描述它)。如果您希望一次处理一个图像,则应适当修改脚本以进行循环。

另一方面,如果您已经在应用程序中使用了paperclip,那么它会带来一些rake任务。查看文档

rake paperclip:refresh:thumbnails