2012-11-22 34 views
1

根據這個例子(http://dimaspriyanto.com/2010/06/08/image-watermarking-with-paperclip/),我試着把水印放在我上傳的每張圖片上(現在,我剋制自己到大)。回形針水印

你猜怎麼着?它不起作用!

所以在我的畫面模式,我有

require 'paperclip_processors/watermark' 
    has_attached_file :image, 
        :styles => {:medium => "300x300^", :thumb => "150x105^", 
         :large => { 
          :geometry => "460", 
          :watermark_path => ":rails_root/public/images/watermark.png" 
         } 
        }, 
        :url => "/images/:style/:id_:style.:extension", 
        :path => ":rails_root/public/images/:style/:id_:style.:extension" 

和/lib/paperclip_processors/watermark.rb,我有:

module Paperclip 
    class Watermark < Processor 

    attr_accessor :current_geometry, :target_geometry, :format, :whiny, :convert_options, :watermark_path, :overlay, :position 

    def initialize file, options = {}, attachment = nil 
     super 
     geometry   = options[:geometry] 
     @file    = file 
     @crop    = geometry[-1,1] == '#' 
     @target_geometry = Geometry.parse geometry 
     @current_geometry = Geometry.from_file @file 
     @convert_options = options[:convert_options] 
     @whiny   = options[:whiny].nil? ? true : options[:whiny] 
     @format   = options[:format] 
     @watermark_path = options[:watermark_path] 
     @position   = options[:position].nil? ? "SouthEast" : options[:position] 
     @overlay   = options[:overlay].nil? ? true : false 
     @current_format = File.extname(@file.path) 
     @basename   = File.basename(@file.path, @current_format) 
    end 

     def crop? 
     @crop 
     end 

     def convert_options? 
     not @convert_options.blank? 
     end 

     def make 
     dst = Tempfile.new([@basename, @format].compact.join(".")) 
     dst.binmode 

     if watermark_path 
      command = "composite" 
      params = "-gravity #{@position} #{watermark_path} #{fromfile} #{transformation_command} #{tofile(dst)}" 
     else 
      command = "convert" 
      params = "#{fromfile} #{transformation_command} #{tofile(dst)}" 
     end 

     begin 
      success = Paperclip.run(command, params) 
     rescue PaperclipCommandLineError 
      raise PaperclipError, "There was an error processing the watermark for #{@basename}" if @whiny 
     end 

     dst 
     end 

     def fromfile 
     "\"#{ File.expand_path(@file.path) }[0]\"" 
     end 

     def tofile(destination) 
     "\"#{ File.expand_path(destination.path) }[0]\"" 
     end  

     def transformation_command 
     scale, crop = @current_geometry.transformation_to(@target_geometry, crop?) 
     trans = "-resize \"#{scale}\"" 
     trans << " -crop \"#{crop}\" +repage" if crop 
     trans << " #{convert_options}" if convert_options? 
     trans 
     end 

    end 

end 

水印是在/公/圖像/和它不會在這個過程中崩潰,我的意思是圖片上傳,每個尺寸,但大的是裸體,沒有水印。

有什麼想法?

回答

0

下面是工程預處理器(我用它) https://gist.github.com/2499137

這兒有你的模型示例代碼:

has_attached_file :data, 
        :processors => [:watermark], 
        :url => "/ckeditor_assets/pictures/:id/:style_:basename.:extension", 
        :path => ":rails_root/public/ckeditor_assets/pictures/:id/:style_:basename.:extension", 
        :styles => { 
        :thumb => '118x100#', 
        :content => { 
         :geometry => '700>', 
         :watermark_path => "#{Rails.root}/public/images/watermark.png", 
         :position => 'SouthWest' 
        }, 
        } 
+0

好,謝謝!所以它可以工作,但水印會調整大小以匹配圖片的高度。我們可以不調整它嗎? – cecile

+0

什麼?我沒有爲我縮放水印。它比Image大嗎? – graudeejs

+0

我的水印是200x50。在上傳的大圖中,它佔據了高度;所以在一張400張大照片上,它是400px。 – cecile