扩展paperclip 增加watermark

阅读更多
1. /lib/paperclip processors add watermark.rb file

2.
module Paperclip
  class Watermark < Processor
    
    class InstanceNotGiven < ArgumentError; end
    
    def initialize(file, options = {})
      super
#      puts attachment.to_yaml
      @file = file
      @current_format   = File.extname(@file.path)
      @basename         = File.basename(@file.path, @current_format)
      @watermark        = RAILS_ROOT + "/watermark/overlay.png" 
      @current_geometry   = Geometry.from_file file # This is pretty slow 
      @watermark_geometry = watermark_dimensions
      
    end  
    
    def watermark_dimensions
      return @watermark_dimensions if @watermark_dimensions
      @watermark_dimensions = Geometry.from_file @watermark
    end

    def make
      dst = Tempfile.new([@basename, @format].compact.join("."))
      watermark = " \\(  #{@watermark} -extract #{@current_geometry.width.to_i}x#{@current_geometry.height.to_i}+#{@watermark_geometry.height.to_i / 2}+#{@watermark_geometry.width.to_i / 2} \\) "
      command = "-gravity center " + watermark + File.expand_path(@file.path) + " " +File.expand_path(dst.path)
      begin
        success = Paperclip.run("composite", command.gsub(/\s+/, " "))
      rescue PaperclipCommandLineError
        raise PaperclipError, "There was an error processing the watermark for #{@basename}" if @whiny_thumbnails
      end
      dst
    end

  end
end


3. in model

class Image < ActiveRecord::Base
  has_attached_file :watermark_photo,
    :styles => {
        :watermark => {
            :geometry => "300x300>",
            :processors => [:thumbnail,:watermark]
        },
        :thumb => {
            :geometry => "100x100#"}
        }

end

你可能感兴趣的:(Rails,ActiveRecord)