2013-04-19 3 views
1

Сегодня я стараюсь писать код для генерации анимированных GIF из папки , но я получаю эту ошибку:RMagick не смог открыть изображение

.../.gem/ruby/2.0.0/gems/rmagick-2.13.2/lib/RMagick.rb:1635:in `read': unable to open image `0.jpg,3.jpg,1.jpg,2.jpg': No such file or directory @ error/blob.c/OpenBlob/2641 (Magick::ImageMagickError) 
from .../.gem/ruby/2.0.0/gems/rmagick-2.13.2/lib/RMagick.rb:1635:in `block in initialize' 
.../.gem/ruby/2.0.0/gems/rmagick-2.13.2/lib/RMagick.rb:1634:in `each' 
.../.gem/ruby/2.0.0/gems/rmagick-2.13.2/lib/RMagick.rb:1634:in `initialize' 
from .../bin/scripts/animate.rb:20:in `new' 
from .../bin/scripts/animate.rb:20:in `<main>' 

Это код:

#!/usr/bin/env ruby 

require 'RMagick' 
include Magick 

files = Dir.glob"*.jpg" 

if (!ARGV[0]) 
puts "Usage:" 
puts "animate.rb 10" 
puts "-0 delay ex. 10" 
else 
    f = files.join(',').to_s 
    animation = ImageList.new("#{f}") 
    animation.delay = ARGV[0].to_i 
    animation.write("animated.gif") 
exit 
end 

Большое спасибо ;)

+0

Вы вступающие весь файл находится на запятая, а затем пытаетесь открыть его. Это не сработает, потому что у вас нет файла с именем «0.jpg, 3.jpg, 1.jpg, 2.jpg» в этом каталоге. – silasjmatson

+0

ok..but как работают скрипты? – starbuck

ответ

3

ImageList.new ожидает имена файлов в качестве аргументов, по одному за раз. Вы предоставляете только один аргумент, строку имени конкатенированных файлов. Таким образом, вместо

f = files.join(',').to_s 
animation = ImageList.new("#{f}") 

использования

animation = ImageList.new *files 

*files инструктирует рубин расширить член массива на отдельные аргументы

+0

awww yep! это работает Thaaanks :) – starbuck

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