процессоры запуска скрепок в выбранном стиле
-
19-09-2019 - |
Вопрос
У меня есть процессор обработки изображений : xxx, и у меня есть два стиля в модели: big и :thumb.
Как я могу обработать с помощью: xxx только изображение: thumb , оставив нетронутым изображение: big?
Решение
По умолчанию задача Rake обновляет все эскизы.Имейте в виду, что он не будет касаться / обрабатывать исходное изображение.
У вас мог бы быть посмотрите на файл Rakefile и тот Привязанность создайте класс и измените, чтобы вы могли указать определенный размер миниатюр, но текущий дизайн предполагает, что вы хотите взять оригинал и переделать все миниатюры из оригинала.
Другие советы
Недавно у меня была похожая проблема, и я нашел это решение на доске объявлений.Надеюсь, это поможет!
has_attached_file :screenshot,
:default_style => :full,
:styles => {
:full => "280x210",
:cropped => { :processors => [:screenshot_crop] }
}
Добавьте этот код в свой файл paperclip.rake:
desc "Reprocesses your attachments style (set CLASS, ATTACHMENT and STYLE)"
task :style => :environment do
module JustForOneDay
NAME = ENV['STYLE']
end
module ::Paperclip
class Attachment
def post_process_styles #:nodoc:
@styles.each do |name, args|
if JustForOneDay::NAME == name
begin
raise RuntimeError.new("Style #{name} has no processors defined.") if args[:processors].blank?
@queued_for_write[name] = args[:processors].inject(@queued_for_write[:original]) do |file, processor|
Paperclip.processor(processor).make(file, args, self)
end
rescue PaperclipError => e
log("An error was received while processing: #{e.inspect}")
(@errors[:processing] ||= []) << e.message if @whiny
end
end
end
end
end
end
for_all_attachments do |instance, name|
result = instance.send(name).reprocess!
end
end
end
Протестировано с помощью Скрепки 2.3.1.1
В Paperclip 2.3.3 это должно быть:
def post_process_styles #:nodoc:
styles.each do |name, style|
if JustForOneDay::NAME == name
begin
raise RuntimeError.new("Style #{name} has no processors defined.") if style.processors.blank?
@queued_for_write[name] = style.processors.inject(@queued_for_write[:original]) do |file, processor|
Paperclip.processor(processor).make(file, style.processor_options, self)
end
rescue PaperclipError => e
log("An error was received while processing: #{e.inspect}")
(@errors[:processing] ||= []) << e.message if @whiny
end
end
end
end
Это просто, просто перейдите к файлу attachment.rb в вашей версии paperclip.
Я упустил это из виду - это не элегантно, но у меня это сработало.
Один из ваших стилей должен иметь размеры, отличные от всех других стилей.Таким образом, в вашем пользовательском процессоре скрепок вы можете увидеть, содержит ли содержимое командной строки заданные размеры.Если это так, вы бы выполнили специальную обработку, если нет, то вы бы этого не сделали.
(Я вырезал этот код - и модифицировал его - из эпизода 182 Railscast Райана Бейта.)
module Paperclip
class Cropper < Thumbnail
def transformation_command
SPECIAL_PROCESSING_FLAG = "150x150"
if crop_command && super.include?(SPECIAL_PROCESSING_FLAG)
crop_command + super.sub(/ -crop \S+/, '')
else
super 'do nothing fancy
end
end
def crop_command
target = @attachment.instance
if target.cropping?
" -crop '#{target.crop_w.to_i}x#{target.crop_h.to_i}+#{target.crop_x.to_i}+#{target.crop_y.to_i}'"
end
end
end
end
В моей ситуации не имело значения, что мы переработали и в неособом случае, поскольку конечный результат ничего не изменил.