Я создаю анимированные GIF-файлы из нескольких исходных изображений с помощью Ruby. Мне нужно максимизировать пропускную способность/минимизировать время, затрачиваемое на создание каждого GIF. Я предпочел бы сохранить исходные изображения в памяти (возможно, Memcached), а не читать их с диска каждый раз, когда они мне понадобятся. Я использовал convert
в backticks для выполнения команд imagemagick непосредственно из Ruby, например.Минимизировать активность диска с помощью rmagick или imagemagick
`convert -delay #{delay} -page #{w}x#{h}+0+0 src01.gif... etc`
Я немного предпочитаю это более RMagick, как я нашел несколько примеров, я могу ссылаться на документы ImageMagick непосредственно. Кажется, что изображения, переданные команде convert
, должны быть путями для изображений на диске. Кроме того, похоже, что результат преобразования commend - это путь к файлу, поэтому сгенерированное изображение будет записано на диск с помощью ImageMagick, и мне нужно будет прочитать его обратно с диска с помощью Ruby для доступа к результирующим данным изображения. Кажется, что я делаю ImageMagick каждый раз считывать исходные изображения с диска и записывать сгенерированный GIF на диск каждый раз. Я думаю, что это, вероятно, будет узким местом и ненужным, поскольку мне не нужно сохранять созданные изображения, которые мне просто нужно получить мгновенно.
Я заметил, что методы RMagick могут принимать Magick::Image
s в качестве параметров вместо файловых путей. В этом случае я мог бы сохранить исходные изображения в памяти. Кроме того, RMagick возвращает сгенерированное изображение как данные в Ruby, что мне нужно, мне не нужно его записывать на диск.
Я имею в виду использование RMagick вместо
`convert...`
для снижения активности диска.
Итак, вопрос 1: Имеет ли это смысл? Поскольку RMagick предположительно обертывает ImageMagick, является ли RMagick фактически чтением и записью на диск под капотом или у него есть какой-то способ использования ImageMagick без активности диска?
И вопрос 2: Есть ли способ получить данные изображения в и из команды преобразования ImageMagick без активности диска?
Надеюсь, что это имеет смысл. Просто пытаюсь обернуть мне голову и извиниться, если я не понимаю.
Возможно, вы можете рассмотреть возможность создания небольшого RAMdisk в качестве одного из вариантов. –
Конечно, вы можете также накапливать/генерировать изображения внутри Ruby и создавать анимированный GIF из последовательности ... не уверен в синтаксисе Ruby, но в PHP вы делаете 'addImage()' для каждого из фреймов, пока не будете полная последовательность, то вы делаете 'setImageDispose()' и 'writeImages (" animated.gif ", true)' –