2013-11-09 1 views
1

В настоящее время я пытаюсь получить первый кадр gif-файла, изменить его размер и сохранить его как файл jpg.Rails + Carrierwave + RMagick: 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 

ответ

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

Итак ... Я, наконец, нашел решение после нескольких часов головной боли, почему это не работает. Оказывается, вы сначала должны коснуться/создать файл, чтобы сделать эту работу. Я также переключился с RMagick на Mini Magick. Не по какой-то причине просто попробовал, если он будет работать с MiniMagick, но у меня все еще была та же проблема. Вот мой новый код процесс с мини-Магик:

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 documenation об этом ...

Смежные вопросы