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 中有一些记录:如何:将版本名称移动到文件名的末尾,而不是前面

使用此方法,您的版本代码将如下所示:

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 回答