Skip to content, Skip to search

Changes

Script Parameters

1,409 bytes added, 15:45, 5 July 2018
Adding note to clarify this is a ImageJ2 feature, does not work with ImageJ1.x.
{{Learn | scripting}}All scripting languages have access to a universal <code>#@parameter</code> notation for declaring inputs and outputs. This approach is preferred to using ImageJ 1.x <code>GenericDialog</code> because it is totally agnostic of the user interface, allowing such scripts to run in a variety of contexts. As with [[Writing_ImageJ2_plugins|ImageJ2 plugins]], script parameterization is based on the [[SciJava]] [https://github.com/scijava/scijava-common/blob/scijava-common-2.40.0/src/main/java/org/scijava/plugin/Parameter.java @Parameter annotation]—so experience with plugin writing directly translates to scripting, and vice versa.  <b>Note:</b> <i>Script parameters are a feature of [[ImageJ2]]; they will not work in plain [[ImageJ1]]. The [[Fiji]] distribution of ImageJ is built on ImageJ2, so they also work in Fiji.</i>
== Basic syntax ==
<ol>
<li>Parameter declarations begin with <code>#@</code>. Each such line contains a single parameter declaration or script directive and nothing else.</li>
<li><code>#@ Type variableName</code> will declare an input of the indicated type, assigned to the specified name.(The use of a space between <code>#@</code> and <code>Type</code> is encouraged, but not required.)</li><li><code>#@output Type outputName</code> will declare the variable of the specified name as an output parameter with the given type.The <code>Type</code> parameter is optional, as the output will be treated as <code>Object</code> be default. (For the <code>output</code> directive and other script directives, no space is allowed between <code>#@</code> and the directive.)</li>
</ol>
| | <code>File</code>
| file chooser
| | <code>open</code> {{!}} <code>save</code> {{!}} <code>directory</code> {{!}} <code>extensions:</code>
|}
=== Files and Folders ===
By default, a <code>#@File</code> parameter will create a chooser for a single file. Here is an example in python:
<source lang="python">
print(myFile)
</source>
 
You can request for multiple files or folders as well.
 
Example in ImageJ Macro Language:
 
<source lang="python">
#@File[] listOfPaths(label="select files or folders", style="both")
 
print("There are "+listOfPaths.length+" paths selected.");
 
for (i=0;i<listOfPaths.length;i++) {
myFile=listOfPaths[i];
if (File.exists(myFile)) {
print(myFile + " exists.");
if (File.isDirectory(myFile)) {
print("Is a directory");
} else {
print("Is a file");
}
}
}
 
</source>
The exact same code works for the [[Macros|ImageJ1 Macro language]], too.
 
You can set restrictions on accepted file types based on file extension (using a <code>style</code> property):
 
<source lang="python">
#@ File(label="Select an image file", style="extensions:png/jpg") myImageFile
 
print(myImageFile)
</source>
If you want to select a directory instead, use a <code>style</code> property:
Emailconfirmed, administrator
937
edits