Rails 回形针在上传前旋转图像

Rails Paperclip rotate image before uploading

我的问题很简单:在将图像上传到 Amazon S3 之前,我想将其旋转 270°。 我从研究中了解到我必须使用 "processor" 来执行此操作。例如。我尝试了很多东西但都卡住了。

我的模型是这样的:

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)并在之后保存。但那是行不通的。

如何实现这个很简单?

如果您这样做,我假设您已经设置了 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 可能无法无损转换,因此您可能需要检查图像质量并进行相应调整。