我目前正在尝试获取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
答案 0 :(得分:3)
实际上还有另一种更清洁的方法;它甚至在官方维基中有所记载: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
答案 1 :(得分: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文件......