Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>I added the following to <code>RAILS_ROOT/lib/paperclip_processors/watermark.rb</code>:</p> <pre><code>module Paperclip class Watermark &lt; Processor # Handles watermarking of images that are uploaded. 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 # TODO: extend watermark # Returns true if the +target_geometry+ is meant to crop. def crop? @crop end # Returns true if the image is meant to make use of additional convert options. def convert_options? not @convert_options.blank? end # Performs the conversion of the +file+ into a watermark. Returns the Tempfile # that contains the new image. def make dst = Tempfile.new([@basename, @format].compact.join(".")) dst.binmode command = "convert" params = [fromfile] params += transformation_command params &lt;&lt; tofile(dst) begin success = Paperclip.run(command, params.flatten.compact.collect{|e| "'#{e}'"}.join(" ")) rescue PaperclipCommandLineError raise PaperclipError, "There was an error resizing and cropping #{@basename}" if @whiny end if watermark_path command = "composite" params = %W[-gravity #{@position} #{watermark_path} #{tofile(dst)}] params &lt;&lt; tofile(dst) begin success = Paperclip.run(command, params.flatten.compact.collect{|e| "'#{e}'"}.join(" ")) rescue PaperclipCommandLineError raise PaperclipError, "There was an error processing the watermark for #{@basename}" if @whiny end end dst end def fromfile File.expand_path(@file.path) end def tofile(destination) File.expand_path(destination.path) end def transformation_command scale, crop = @current_geometry.transformation_to(@target_geometry, crop?) trans = %W[-resize #{scale}] trans += %W[-crop #{crop} +repage] if crop trans &lt;&lt; convert_options if convert_options? trans end end end </code></pre> <p><strong>Update:</strong> If you're using a new version of paperclip (3+), the begin block should now look like this:</p> <pre><code>begin Paperclip.run(command, params.join(' ')) rescue Cocaine::ExitStatusError =&gt; e raise Paperclip::Error, "There was an error processing the watermark for #{@basename}" if @whiny rescue Cocaine::CommandNotFoundError =&gt; e raise Paperclip::Errors::CommandNotFoundError.new("Could not run the `convert` command. Please install ImageMagick.") end </code></pre> <p>And then the <code>image_decorator.rb</code> model:</p> <pre><code>require 'paperclip_processors/watermark' Spree::Image.class_eval do has_attached_file :attachment, :processors =&gt; [:thumbnail, :watermark], :styles =&gt; { :mini =&gt; '48x48&gt;', :small =&gt; '100x100&gt;', :product =&gt; '160x160#', :large =&gt; { :geometry =&gt; '460x680&gt;', :watermark_path =&gt; "#{Rails.root}/public/spree/watermark.png", :position =&gt; 'SouthWest', :format =&gt; :png } }, :default_style =&gt; :product, :url =&gt; '/spree/products/:id/:style/:basename.:extension', :path =&gt; ':rails_root/public/spree/products/:id/:style/:basename.:extension' end </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload