Qualcuno sa come schiacciare le GIF animate fino al loro primo fotogramma usando Carrierwave + MiniMagick?Carrierwave + MiniMagick - Come schiacciare le GIF animate al loro primo frame?
6
A
risposta
12
penso MiniMagick ha avuto alcune modifiche, perché ho appena passato tre ore a cercare di scoprire perché il codice didn di Andrey lavora per me
ho ottenuto il seguente errore:
ActiveRecord::RecordInvalid (Validation failed:
Image Failed to manipulate with MiniMagick, maybe it is not an image?
Original Error: Command
("mogrify -scene /var/folders/0o/0oqNck+++TI/-Tmp-/mini_magick2022-499-15zc.gif")
failed: {:status_code=>1, :output=>"mogrify: invalid argument for option
`/var/folders/0o/0oqNck+++TI/-Tmp-/mini_magick2022-499-15zc.gif': -scene
@ error/mogrify.c/MogrifyImageCommand/5558.\n"})
Finalmente ho scoperto che MiniMagick :: L'immagine ha il metodo collapse!
(che si trova qui: http://www.ruby-doc.org/gems/docs/j/jf--mini_magick-3.1/MiniMagick/Image.html#method-i-collapse-21) che risolve il problema:
process :remove_animation
def remove_animation
manipulate! do |img|
if img.mime_type.match /gif/
img.collapse!
end
img
end
end
3
opere è tutto per me:
def only_first_frame
manipulate! do |img|
if img.mime_type.match /gif/
if img.scene == 0
img = img.cur_image #Magick::ImageList.new(img.base_filename)[0]
else
img = nil # avoid concat all frames
end
end
img
end
end
Quindi è necessario chiamare:
process :only_first_frame
+0
Scuse che ci sono voluti sono così tanto tempo da accettare la tua risposta! – alistairholt
Non l'ho provato ma sembra ideale. Grazie per la pubblicazione. – alistairholt
Il metodo potrebbe essere riscritto per dire: 'manipola! (&: Collapse!) If content_type == 'image/gif'' –