任何人都知道如何使用Carrierwave + MiniMagick將動畫GIF壓縮到第一幀?Carrierwave + MiniMagick - 如何將動畫GIF壓縮到第一幀?
6
A
回答
12
我覺得MiniMagick已經發生了一些變化,因爲我花了三個小時試圖找出爲什麼安德烈的代碼沒不爲我工作。
我得到了以下錯誤:
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"})
最後我發現,MiniMagick ::圖像具有方法collapse!
(這裏找到:http://www.ruby-doc.org/gems/docs/j/jf--mini_magick-3.1/MiniMagick/Image.html#method-i-collapse-21),它解決了這個問題:
process :remove_animation
def remove_animation
manipulate! do |img|
if img.mime_type.match /gif/
img.collapse!
end
img
end
end
3
它的作品對我來說:
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
然後,你必須調用:
process :only_first_frame
+0
道歉,它花我很長時間才能接受你的答案! – alistairholt
相關問題
- 1. Carrierwave mongoid minimagick
- 2. 將動畫GIF的第一幀繪製爲HTML5 Canvas
- 3. 如何繪製逐幀的動畫從第x幀到第y幀的動畫
- 4. 動畫* .gif幀率太高
- 5. Amazon S3的gif動畫 - 只上傳第一幀
- 6. PHP Gif GD庫動畫損失只顯示第一幀
- 7. GIF到PNG:只提取第一幀
- 8. 動畫完成第一幀
- 9. Carrierwave PDF格式轉換爲JPG(MiniMagick)
- 10. 如何使用CarrierWave在rails中上傳動畫GIF?
- 11. 如何加載一個動畫片段並轉到第一幀
- 12. 如何從Java Swing的第一幀啓動.gif文件?
- 13. Imagick:從動畫GIF中刪除幀?
- 14. 如何在WinRT中將一組畫布轉換爲動畫GIF?
- 15. ImageMagick - 是否可以創建一個動畫gif文件的靜態縮略圖(只有第一幀)?
- 16. 如何將多維數據幀壓縮到單個列中?
- 17. GIF LZW壓縮在C#
- 18. 如何顯示動畫GIF?
- 19. uiscrollview帶紋理的背景被壓縮後的幀動畫
- 20. 將Gif動畫添加到複選框
- 21. 跳過第一個關鍵幀動畫
- 22. Heroku,CarrierWave,MiniMagick:隨機tmp文件丟失
- 23. 防止MFMailComposeViewController縮放動畫GIF
- 24. 使用PHP GD縮小動畫GIF
- 25. GWT和動畫gif:如何顯示個別幀?
- 26. 如何統計android動畫GIF的幀數android
- 27. 如何提取GIF動畫的幀用PHP
- 28. 如何從動畫GIF中提取幀時間信息?
- 29. carrierwave minimagick轉換後的svg不兼容
- 30. CarrierWave無法調整大小/ Minimagick
我還沒試過,但聽起來很理想。感謝發佈。 – alistairholt
可以重寫方法來說:'操作!(&:崩潰!)if content_type =='image/gif'' –