Paperclip gemi ile resimlere watermark ekleme
Paperclip gemi varsayılan olarak resimlere watermark eklemeyi desteklemiyor. Bu yüzden watermark ekleyebilmek için projeye, imagemagick'in resimleri birleştirme komutu olan ‘composite’ i içeren bir processor eklememiz gerekiyor.
Öncelikle paperclip geminin processorları aradığı
lib/paperclip_processors
klasörünün içine watermark.rb dosyamızı oluşturup
module Paperclip
class Watermark < Thumbnail
# Handles watermarking of images that are uploaded.
attr_accessor :format, :whiny, :watermark_path, :position
def initialize file, options = {}, attachment = nil
super
@file = file
@whiny = options[:whiny].nil? ? true : options[:whiny]
@format = options[:format]
@watermark_path = options[:watermark_path]
@position = options[:watermark_position].nil? ? "SouthEast" : options[:watermark_position]
@current_format = File.extname(@file.path)
@basename = File.basename(@file.path, @current_format)
end
# Performs the conversion of the +file+ into a watermark. Returns the Tempfile
# that contains the new image.
def make
return @file unless watermark_path
dst = Tempfile.new([@basename, @format].compact.join("."))
dst.binmode
command = "composite"
params = "-gravity #{@position} #{watermark_path} #{fromfile} #{tofile(dst)}"
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
end
end
şeklinde watermark classımızı ekliyoruz.
Ardından ilgili model dosyamızda
has_attached_file :photo,
processors: [:thumbnail, :watermark],
styles: {
zoom: { geometry: '1024x576#', watermark_path: "#{Rails.root}/app/assets/images/watermarks/watermark_zoom.png"},
main: { geometry: '770x520#', watermark_path: "#{Rails.root}/app/assets/images/watermarks/watermark_main.png"}
}
şeklinde eklediğimiz resimler için kullanılacak processorlerı tanımlıyoruz, thumbnail resimlerin boyutunu düzenlemek için paperclipte tanımlanmış processor classıdır eklenmediği sürece resim boyutlandırması yapılmaz. Ardından farklı boyutlar için yeniden boyutlandırma için geometry ve watermark olarak eklenecek resmimizin path'ini veriyoruz.
Bu işlemlerden sonra eklenecek her resime watermark'ınız eklenecektir.
Eğer daha önce upload ettiğiniz resimlere de watermark'ınızın eklenmesini istiyorsanız.
rake paperclip:refresh class=Product
rake'ini çalıştırmanız yeterlidir.
comments powered by Disqus