用回形针的水印

根据这个例子(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 

水印在/ public / images /中并且在此过程中不会崩溃,我的意思是图片被上传,各种尺寸,但是大图片是裸体的,没有水印。

任何的想法?

这是有效的预处理器(我使用它) 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' }, }