2015-02-03 3 views
3

Я хочу получить размеры загружаемых изображений перед созданием при прикреплении файла. Я получил это через Extracting Image dimensions через модель. Но я хочу отправить через пользовательский процессор. То, что я попытался это: Player.rbКак создать пользовательский процессор скрепления для извлечения размеров изображения Rails 4

class Player < ActiveRecord::Base 
    has_attached_file :avatar, processors: [:custom], :style => {:original => {}} 
.... 
end 

/lib/paperclip_processors/custom.rb

module Paperclip 
    class Custom < Processor 
    def initialize file, options = {}, attachment = nil 
     super 
     @file   = file 
     @attachment  = attachment 
     @current_format = File.extname(@file.path) 
     @format   = options[:format] 
     @basename  = File.basename(@file.path, @current_format) 
    end 

    def make 
     temp_file = Tempfile.new([@basename, @format]) 
     #geometry = Paperclip::Geometry.from_file(temp_file) 
     temp_file.binmode 

     if @is_polarized 
     run_string = "convert #{fromfile} -thumbnail 300x400 -bordercolor white -background white +polaroid #{tofile(temp_file)}"  
     Paperclip.run(run_string) 
     end 

     temp_file 
    end 

    def fromfile 
     File.expand_path(@file.path) 
    end 

    def tofile(destination) 
     File.expand_path(destination.path) 
    end 
    end 
end 

Я получил это (custom.rb) код из this source. Возможно ли, чего я пытаюсь достичь? Как? Пожалуйста, помогите мне, где я ошибаюсь? Заранее спасибо :)

+0

Вы не уточнили, что на самом деле неправильно. Какие результаты вы получаете с этим процессором 'Paperclip :: Custom'? –

+0

Также стоит упомянуть, что «ссылка», которую вы упомянули как источник, скорее всего, [этот вопрос] (http://stackoverflow.com/questions/20225589/paperclip-custom-processor-not-changing-image-type). –

+0

@ ŁukaszAdamczak: проблема в том, что он даже не введен в пользовательский процессор. Да, вы правильно получили ссылку только по этой ссылке. Позвольте мне обновить. Я никогда не пробовал модель. Но я должен делать это только по специальному процессору. Не могли бы вы посоветовать, как использовать? –

ответ

10

я воспроизвел ваше дело, и я считаю, что причиной является опечатка здесь:

has_attached_file :avatar, processors: [:custom], :style => {:original => {}} 

Это должно быть :styles вместо :style. Без опции :styles, paperclip не делает любой после обработки и игнорирует ваш :processors.

Кроме того, здесь очень простая реализация Paperclip::Processor - превращает вложения в оттенки серого. Замените команду внутри convert, чтобы выполнить свою собственную постобработку:

# lib/paperclip_processors/custom.rb 
module Paperclip 
    class Custom < Processor 
    def make 
     basename = File.basename(file.path, File.extname(file.path)) 
     dst_format = options[:format] ? ".\#{options[:format]}" : '' 

     dst = Tempfile.new([basename, dst_format]) 
     dst.binmode 

     convert(':src -type Grayscale :dst', 
       src: File.expand_path(file.path), 
       dst: File.expand_path(dst.path)) 

     dst 
    end 
    end 
end 
+0

Спасибо, это мне очень помогает .. :) –

+2

''. \ # {Options [: format]} "' должно быть ''. # {Options [: format]} "' – Roko

+0

Нет-': styles' игнорирование присутствия ': процессоров было прямо на месте для меня! –