1

現在、gif ファイルの最初のフレームを取得し、サイズを変更して jpg ファイルとして保存しようとしています。

変換はうまくいくようです。ただし、正しいファイル拡張子で保存されません。それでも.gifとして保存されるので、開こうとすると、画像を開けませんと表示され、GIFファイルではないようです。次に、拡張機能の名前を自分で変更すると、機能します。

ここに私の処理コードがあります:

version :gif_preview, :if => :is_gif? do
  process :remove_animation
  process :resize_to_fill => [555, 2000]
  process :convert => 'jpg'
end

def remove_animation
  manipulate! do |img, index|
    index == 0 ? img : nil
  end
end
4

2 に答える 2

4

実際には、これを実現する別のよりクリーンな方法があります。公式wikiにもいくらか文書化されています: How To: Move version name to end of filename, instead of front

この方法を使用すると、バージョンコードは次のようになります。

version :gif_preview, :if => :is_gif? do
  process :remove_animation
  process :resize_to_fill => [555, 2000]
  process :convert => 'jpg'

  def full_filename(for_file)
    super.chomp(File.extname(super)) + '.jpg'
  end
end

def remove_animation
  manipulate! do |img, index|
    index == 0 ? img : nil
  end
end    
于 2014-02-18T09:25:53.110 に答える
1

だから...これがうまくいかない理由を何時間も頭を悩ませた後、ようやく解決策を見つけました。これを機能させるには、最初にファイルをタッチ/作成する必要があることがわかりました。また、RMagick から Mini Magick に切り替えました。MiniMagick で動作するかどうかを試してみただけの特別な理由はありませんが、それでも同じ問題がありました。Mini Magick を使用した新しいプロセス コードは次のとおりです。

version :gif_preview, :if => :is_gif? do
  process :gif_to_jpg_convert
end

def gif_to_jpg_convert
  image = MiniMagick::Image.open(current_path)
  image.collapse! #get first gif frame
  image.format "jpg"
  File.write("public/#{store_dir}/gif_preview.jpg", "") #"touch" file
  image.write "public/#{store_dir}/gif_preview.jpg"
end

これに関するドキュメントが本当に0である理由がわかりません...

于 2013-11-09T15:23:49.790 に答える