简体   繁体   中英

Rotate image with Paperclip 5

I've got photo on my model

has_attached_file :photo, BucketConfig.default.merge(
      processors: [:rotator],
      styles: {
          original: Proc.new { |a| { rotation: a.rotation } }
      },
      default_url:  ActionController::Base.helpers.asset_path('assets/request_default.png')
  )

To catch a rotation param I do something like this

attr_accessor :rotation

    before_save :adjust_rotation
    before_update :reprocess_image

    protected

    def adjust_rotation
      self.rotation = self.rotation.to_i
      self.rotation = self.rotation % 360 if self.rotation >= 360 || self.rotation <= -360
    end

    def reprocess_image
      self.photo.reprocess! unless self.rotation.zero?
    end

my Rotator process in lib/paperclip

module Paperclip
  class Rotator < Processor
    def transformation_command
      if rotator_command
        rotator_command + super.join(' ')
      else
        super
      end
    end

    def rotator_command
      target = @attachment
      if target.rotation.present?
        " -rotate #{target.rotation} "
      end
    end
  end
end

When I call

m = Model.first
m.rotation=90
m.save

I've got error:

NoMethodError - undefined method `closed?' for nil:NilClass
Did you mean?  clone:
  paperclip (4.3.7) lib/paperclip/attachment.rb:582:in `block in unlink_files'
  paperclip (4.3.7) lib/paperclip/attachment.rb:581:in `unlink_files'
  paperclip (4.3.7) lib/paperclip/attachment.rb:536:in `post_process_style'
  paperclip (4.3.7) lib/paperclip/attachment.rb:511:in `post_process_styles'
  paperclip (4.3.7) lib/paperclip/attachment.rb:504:in `block (2 levels) in post_process'

Why my reprocess! method doesn't work ? Do I something wrong with my rotator process? Where's the problem?

You have no make method: https://github.com/rezeko/paperclip/blob/master/lib/paperclip/processor.rb#L9

A fix is to use class Rotator < Thumbnail , and just inherit the processing setup by the default processor.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM