Mam: procesor obrazu xxx i mam dwa style w modelu: duży i: kciuk.spinacze uruchamiają procesory w wybranym stylu
Jak mogę przetworzyć z: xxx tylko obrazem kciuka pozostawiając: duży obraz nietknięty?
Mam: procesor obrazu xxx i mam dwa style w modelu: duży i: kciuk.spinacze uruchamiają procesory w wybranym stylu
Jak mogę przetworzyć z: xxx tylko obrazem kciuka pozostawiając: duży obraz nietknięty?
Domyślnie zadanie Rake odświeża wszystkie miniatury. Pamiętaj, że nie dotknie/nie przetworzy oryginalnego obrazu.
Możesz mieć klasę look at the Rakefile i Attachment i modyfikować, aby umożliwić określenie określonego rozmiaru miniatury, ale obecny projekt zakłada, że chcesz wziąć oryginał i ponowić wszystkie miniatury z oryginału.
Kludowałem to - to nie jest eleganckie, ale zadziałało.
Jeden z twoich stylów powinien mieć wymiary inne niż wszystkie pozostałe style. W ten sposób w swoim niestandardowym procesorze spinacza można sprawdzić, czy zawartość ciągu poleceń zawiera podane wymiary. Jeśli tak, to zrobiłbyś specjalne przetwarzanie, jeśli nie, nie zrobiłbyś tego.
(I obcięty ten kod - i zmodyfikowała go - od Ryana BATE Railscast Odcinek 182.)
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
w mojej sytuacji nie miało to znaczenia, że przetworzony w szczególnym przypadku nie zbyt, ponieważ wynik końcowy niczego nie zmienił.
Niedawno miałem podobny problem i znalazłem to rozwiązanie na tablicy ogłoszeń. Mam nadzieję, że to pomoże!
has_attached_file :screenshot,
:default_style => :full,
:styles => {
:full => "280x210",
:cropped => { :processors => [:screenshot_crop] }
}
Dzięki za napiwek! Wydaje się, że powinieneś podać parametr ': geometry' mimo to -': cropped => {: geometry => 'whatever',: processors => [: screenshot_crop]} 'w przeciwnym wypadku daje' niezdefiniowaną metodę \ '[] 'dla zero: NilClass'. – jibiel
Dodaj ten kod do pliku 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
Testowane z spinacza 2.3.1.1
W spinacza 2.3.3 powinno być:
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
To proste, wystarczy przejść do pliku attachment.rb w wersji spinacza.
A czy istnieje inna opcja, aby przyciąć tylko: obraz kciuka pozostawiając innych w spokoju? Mam na myśli bez modyfikowania klasy Attachment? Może jakiś dodatkowy kod w modelu/kontroler? – astropanic