Изображение J: Сохранить стек как анимированный GIF
У меня есть несколько стопок изображений из конфокального микроскопа, сохраненных в формате.lsm, и я хочу написать макрос, который:
- открывает изображение в папке
- Создает Composite, затем укладывает в RGB, затем устанавливает параметры анимации
- Сохраняет это как анимированный 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");
не повлияет на сохраненный файл. (См. Исходный код. Похоже, что вики-страница устарела / неверна в этом отношении. Не стесняйтесь исправлять документацию самостоятельно, это вики.)