Rails Paperclip在上传前旋转图像

时间:2015-03-19 15:52:36

标签: ruby-on-rails amazon-web-services paperclip

我的问题很简单:在将图像上传到Amazon S3之前,我想将其旋转到270°。 我从研究中了解到我必须使用“处理器”才能做到这一点。例如。我尝试了很多东西但是卡住了。

我的模型看起来像这样:

has_attached_file :label,
  :storage => :s3,
  :bucket => 'my_bucket',
  :s3_permissions => :private,
  :s3_credentials => {
    access_key_id: Rails.application.secrets[:aws_access_key_id],
    secret_access_key: Rails.application.secrets[:aws_secret_access_key]
  },
  :s3_host_name => "s3-eu-west-1.amazonaws.com",
  :processors => [:rotator]

  def rotator
    self.rotation = 270
    self.save
  end

我想我误解了放置这个处理器的位置以及它是如何工作的。我以为我需要直接将它放入模型中并像方法一样调用它?然后我可以将上传图像(自身)的旋转设置为度数(270)并在之后保存。但那不行。

我怎么能意识到这一点很简单?

1 个答案:

答案 0 :(得分:1)

我假设您已经设置了ImageMagick,如果您这样做的话。 convert command接受了大量选项。我刚刚在控制台中尝试了convert screen.jpg -rotate 270 270.jpg并取得了成功。使用Paperclip,您将使用convert_options这仅适用于已转换的图片,因此您需要明确定义样式,例如原创,拇指等转换。以下是一个例子。

has_attached_file :image,
                url:        '/system/:class/:id/:style/image.:extension',
                styles: {
                    original: '650x',
                    thumb: '100x100'
                },
                convert_options: {
                    all: '-rotate 270 -strip -interlace Plane -quality 80%'
                }

需要注意的是,-rotate可能无法无损转换,因此您可能需要检查图像质量并进行相应调整。

Rotated 270 degrees