Изображение J: Сохранить стек как анимированный GIF

У меня есть несколько стопок изображений из конфокального микроскопа, сохраненных в формате.lsm, и я хочу написать макрос, который:

  1. открывает изображение в папке
  2. Создает Composite, затем укладывает в RGB, затем устанавливает параметры анимации
  3. Сохраняет это как анимированный GIF в другую папку

Что я сделал до сих пор:

function stack_to_gif(input, output, filename, fps) {
    open(input + filename);
    run("Make Composite");
    run("Stack to RGB", "slices");
    run("Animation Options...",  "speed=fps");
    run("Animated Gif ... ", "name=title=[Do not use] optional=[] " +
    "image=[No Disposal] set=500 number=-1 transparency=[No Transparency] "     +
    "red=0 green=0 blue=0 index=0 filename=output+filename");
    saveAs("Animated Gif...", output+filename);
    close();
}

inputDir=getDirectory("Choose an input location");
outputDir=getDirectory("Choose an output location");
fps=120;

setBatchMode(true);
list = getFileList(inputDir);
for (i = 0; i < list.length; i++){
    stack_to_gif(inputDir, outputDir, list[i], fps);
}
setBatchMode(false);

Я знаю, что две нижние части работают так же, как я использую их в другом макросе.

Моя проблема связана с частью saveAs("Animated Gif..."), поскольку она не позволяет мне сохранять RGB-типы, даже если это работает, когда я делаю это вручную.

Что я пробовал до сих пор:

  • использовать те же параметры запуска ("Анимированные картинки...") в saveAs ("Анимированные картинки...")
  • использовать один или другой, но не оба
  • использовать run("8-битный"); после параметров анимации, который работает (но я теряю цвета)

Что меня раздражает, так это то, что он работает отлично, когда я делаю это вручную, но я получаю сообщение об ошибке

Чтобы сохранить как анимированный GIF, стек должен быть преобразован в 8-битный индексированный цвет командой Image>Type>8-bit Color.

и я не знаю, почему этого не происходит, когда я делаю это сам.

Спасибо за помощь.

2 ответа

У нас была такая же проблема. Вам необходимо изменить параметр в "set_global_lookup_table_options" с [Не использовать] на [Загрузить из текущего изображения]. Эта функция сохраняет z-стеки в анимированном GIF-файле с задержкой 50 мс (установлено =50), и это нормально для проблемы с цветом.

function animated_gifZ(input, output, filename)
{
open(input + filename);
run("RGB Color", "slices");
run("8-bit Color", "number=256");
run("Animated Gif ... ", "set_global_lookup_table_options=[Load from Current Image]" +
"optional=[] image=[No Disposal] set=50 number=-1 transparency=[No Transparency]" +
"red=0 green=0 blue=0 index=0 filename=output+filename");
saveAs("Animated Gif...", output+filename);
close();
}

Если вы хотите ускорить его, вы можете просто использовать:

function gifZ(input, output, filename)
{
open(input + filename);
run("RGB Color", "slices");
run("8-bit Color", "number=256");
run("Properties...", "frame=[0.1 sec]");
saveAs("Gif", output+filename);
close();
}

Надеюсь, поможет.

Когда я использовал средство записи макросов (Plugins> Macros> Record...), чтобы записать команду, соответствующую File> Save As> Animated Gif..., я получил следующую команду:

run("Animated Gif ... ", "name=[my new name] set_global_lookup_table_options=[Do not use] optional=[] image=[No Disposal] set=20 number=-1 transparency=[No Transparency] red=0 green=0 blue=0 index=0 filename=/usr/temp/animated.gif");

В вашей команде часть name=title=[Do not use] Кажется, неправильно. Если вы хотите использовать текущий заголовок изображения, используйте конкатенацию строк, чтобы вставить содержимое переменной:

run("Animated Gif ... ", "name=[" + myTitle + "] set_global_lookup_table_options=[Do not use] optional=[] image=[No Disposal] set=20 number=-1 transparency=[No Transparency] red=0 green=0 blue=0 index=0 filename=/usr/temp/animated.gif");

Но так или иначе, name параметр не требуется, так как он будет переопределен filename параметр, содержащий полный путь к файлу, так что вы можете спокойно его оставить.

Таким же образом вы можете опустить любой параметр, который не отличается от значения по умолчанию. В моих тестах это работало так же хорошо:

run("Animated Gif ... ", "set=20 filename=/usr/temp/animated.gif");

Примечание. При сохранении анимированных GIF-файлов скорость воспроизведения определяется только параметром " Задать задержку в миллисекундах" (set=20 в моем примере) так работает run("Animation Options...", "speed=fps"); не повлияет на сохраненный файл. (См. Исходный код. Похоже, что вики-страница устарела / неверна в этом отношении. Не стесняйтесь исправлять документацию самостоятельно, это вики.)

Другие вопросы по тегам