| IOFormat Python 1.8.0

Loading...
Searching...
No Matches
Plugins

There are 2 different kinds of plugins:

- Extractors : for data extraction from a stream or a file
- Writers : for data encoding into a stream or a file

IOFormat is delivered with a collection of plugins (extractors and/or writers) but external plugins can also be added. All plugins present and compatible will be loaded at start-up.

# Extractor plugins

Extractors are designated by a name, by a list of supported formats and by their extensions. The name of the plugin can be used in IOFormat APIs to specifically require its use if many others are available. The format can be used in IOFormat APIs to indicate the encoding of a dataset for reading. In the case where more than one plugin can handle this format, the IOFormat configuration will determine the plugins to apply and their priority.

Here is the list of extractor plugins delivered with IOFormat:

Title | Plugin Name | Handled Formats | Supported Extensions | ThirdParty
--- | --- | --- | --- | ---
Amira | AmiraMeshPlugin | AM | am |
BMP | EasyBmpPlugin | BMP | bmp | easybmp
CSV | CsvPlugin | CSV | csv |
DICOM | GdcmPlugin | DICOM | acr, dcm, dc3, dic, dicom | GDCM
Digital Micrograph | GatanPlugin | DM | dm3, dm4 |
GIF | GifLibPlugin | GIF | gif | GifLib
JPEG | TurboJpegPlugin | JPEG | jpeg, jpg | libjpeg-turbo
LDM | LdmPlugin | LDM | ldm, lda |
MRC | MrcPlugin | MRC | mrc, rec, ali |
OpenJpeg | OpenJpegPlugin | JPEG2000, JPEG2000_CODESTREAM | jp2, jpc, j2c, j2k | OpenJPEG
PNG | PngPlugin | PNG | png | libpng
TIFF | TiffPlugin | TIFF, OME-TIFF | tiff, tif, tf2, tf8, btf | libTiff
Visilog | VisilogPlugin | VISILOG_3, VISILOG_4, VISILOG_5, VISILOG_6 | im3, im4, im5, im6 |
WEBP | WebPPlugin | WEBP | webp | lib Webp

## LDM Extractor

This extractor is written from native code, without third party libraries.

The input must be a valid LDM header, and it will search the tile data relative to it.

LDM extractor returns a `LodImageView` which contains 3D `ImageView` instances.

All metadata from LDM format are supported by the extractor.

Metadata | path in tree | Comment
--- | --- | ---
DataFilename | /LDM/VolumeInformation |
U | /LDM/VolumeInformation/Size |
V | /LDM/VolumeInformation/Size |
W | /LDM/VolumeInformation/Size |
DataType | /LDM/VolumeInformation |
U | /LDM/VolumeInformation/TileSize |
V | /LDM/VolumeInformation/TileSize |
W | /LDM/VolumeInformation/TileSize |
Border | /LDM/VolumeInformation |
NumSignificantBits | /LDM/VolumeInformation |
Min | /LDM/VolumeInformation |
Max | /LDM/VolumeInformation |
N | /LDM/VolumeInformation/Histogram/ItemXXXXX | Number of occurences for XXXXXth item (0 to max 65536)
V | /LDM/VolumeInformation/Histogram/ItemXXXXX | XXXXXth range value (integer or float)

## DICOM Extractor

This extractor is based on the GDCM library.

Supported types for input:

- UNSIGNED_INTEGER
- SIGNED_INTEGER

Supported color space:

- MONOCHROME1
- MONOCHROME2
- RGB

Dimensions:

- 2D (images)
- 3D (sequences)

This extractor returns a readable `ImageView` with at least two dimensions.

All metadata from DICOM format supported by GDCM library are read by the extractor. Metadata are not identified by their tag value, but the associated name given by specification.

The library used is GDCM 3.0.23 under BSD License

## MRC Extractor

Extractor is written from native code, without third party libraries.

It is based on MRC/CCP4 2014 file format and MRC/CCP4 2000 file format specifications.

To this day, the MRC reader supports all elements from the MRC specification. Extended headers are supported for `FEI1`, `FEI2`, and `IMOD`.

The MRC extractor returns a readable `ImageView` with two or three dimensions.

All metadata supported by the MRC format are handled by the extractor.

Metadata | path in tree | extension
--- | --- | ---
start | /MRC |
sampling | /MRC |
cellSize | /MRC |
cellAngles | /MRC |
axisMapping | /MRC |
min | /MRC |
max | /MRC |
mean | /MRC |
origin | /MRC |
rms | /MRC |
spaceGroup | /MRC |
labels | /MRC |
extendedHeaderType | /MRC |
version | /MRC |
intCount | /MRC/imod |
realCount | /MRC/imod |
imodFlags | /MRC/imod |
idType | /MRC/imod |
lens | /MRC/imod |
nd1 | /MRC/imod |
nd2 | /MRC/imod |
vd1 | /MRC/imod |
vd2 | /MRC/imod |
originalTiltAngles | /MRC/imod |
currentTiltAngles | /MRC/imod |
timestamp | /MRC/extended/n | FEI1/2 (for each frame n)
microscopeType | /MRC/extended/n | FEI1/2 (for each frame n)
dNumber | /MRC/extended/n | FEI1/2 (for each frame n)
application | /MRC/extended/n | FEI1/2 (for each frame n)
applicationVersion | /MRC/extended/n | FEI1/2 (for each frame n)
highTension | /MRC/extended/n/gun | FEI1/2 (for each frame n)
dose | /MRC/extended/n/gun | FEI1/2 (for each frame n)
alphaTilt | /MRC/extended/n/stage | FEI1/2 (for each frame n)
betaTilt | /MRC/extended/n/stage | FEI1/2 (for each frame n)
stage | /MRC/extended/n/stage | FEI1/2 (for each frame n)
tiltAxisAngle | /MRC/extended/n/stage | FEI1/2 (for each frame n)
dualAxisRotation | /MRC/extended/n/stage | FEI1/2 (for each frame n)
pixelSize | /MRC/extended/n/stage | FEI1/2 (for each frame n)
defocus | /MRC/extended/n/optics | FEI1/2 (for each frame n)
stemDefocus | /MRC/extended/n/optics | FEI1/2 (for each frame n)
appliedDefocus | /MRC/extended/n/optics | FEI1/2 (for each frame n)
instrumentMode | /MRC/extended/n/optics | FEI1/2 (for each frame n)
projectionMode | /MRC/extended/n/optics | FEI1/2 (for each frame n)
objectiveLensMode | /MRC/extended/n/optics | FEI1/2 (for each frame n)
highMagnificationMode | /MRC/extended/n/optics | FEI1/2 (for each frame n)
probeMode | /MRC/extended/n/optics | FEI1/2 (for each frame n)
eftemOn | /MRC/extended/n/optics | FEI1/2 (for each frame n)
magnification | /MRC/extended/n/optics | FEI1/2 (for each frame n)
cameraLength | /MRC/extended/n/optics | FEI1/2 (for each frame n)
spotIndex | /MRC/extended/n/optics | FEI1/2 (for each frame n)
illuminatedArea | /MRC/extended/n/optics | FEI1/2 (for each frame n)
intensity | /MRC/extended/n/optics | FEI1/2 (for each frame n)
convergenceAngle | /MRC/extended/n/optics | FEI1/2 (for each frame n)
illuminationMode | /MRC/extended/n/optics | FEI1/2 (for each frame n)
wideConvergenceAngleRange | /MRC/extended/n/optics | FEI1/2 (for each frame n)
slitInserted | /MRC/extended/n/eftemImaging | FEI1/2 (for each frame n)
slitWidth | /MRC/extended/n/eftemImaging | FEI1/2 (for each frame n)
accelerationVoltageOffset | /MRC/extended/n/eftemImaging | FEI1/2 (for each frame n)
driftTubeVoltage | /MRC/extended/n/eftemImaging | FEI1/2 (for each frame n)
energyShift | /MRC/extended/n/eftemImaging | FEI1/2 (for each frame n)
shiftOffset | /MRC/extended/n/eftemImaging | FEI1/2 (for each frame n)
shift | /MRC/extended/n/eftemImaging | FEI1/2 (for each frame n)
integrationTime | /MRC/extended/n/eftemImaging | FEI1/2 (for each frame n)
binningWidth | /MRC/extended/n/eftemImaging | FEI1/2 (for each frame n)
binningHeight | /MRC/extended/n/eftemImaging | FEI1/2 (for each frame n)
cameraName | /MRC/extended/n/camera | FEI1/2 (for each frame n)
readoutAreaLeft | /MRC/extended/n/camera | FEI1/2 (for each frame n)
readoutAreaTop | /MRC/extended/n/camera | FEI1/2 (for each frame n)
readoutAreaRight | /MRC/extended/n/camera | FEI1/2 (for each frame n)
readoutAreaBottom | /MRC/extended/n/camera | FEI1/2 (for each frame n)
cetaNoiseReduction | /MRC/extended/n/camera | FEI1/2 (for each frame n)
cetaFrameSummed | /MRC/extended/n/camera | FEI1/2 (for each frame n)
directDetectorElectonCounting | /MRC/extended/n/camera | FEI1/2 (for each frame n)
directDetectorAlignFrames | /MRC/extended/n/camera | FEI1/2 (for each frame n)
cameraParamReserved0 | /MRC/extended/n/camera | FEI1/2 (for each frame n)
cameraParamReserved1 | /MRC/extended/n/camera | FEI1/2 (for each frame n)
cameraParamReserved2 | /MRC/extended/n/camera | FEI1/2 (for each frame n)
cameraParamReserved3 | /MRC/extended/n/camera | FEI1/2 (for each frame n)
cameraParamReserved4 | /MRC/extended/n/camera | FEI1/2 (for each frame n)
cameraParamReserved5 | /MRC/extended/n/camera | FEI1/2 (for each frame n)
cameraParamReserved6 | /MRC/extended/n/camera | FEI1/2 (for each frame n)
cameraParamReserved7 | /MRC/extended/n/camera | FEI1/2 (for each frame n)
cameraParamReserved8 | /MRC/extended/n/camera | FEI1/2 (for each frame n)
cameraParamReserved9 | /MRC/extended/n/camera | FEI1/2 (for each frame n)
phasePlate | /MRC/extended/n/camera | FEI1/2 (for each frame n)
stemDetectorName | /MRC/extended/n/stem | FEI1/2 (for each frame n)
gain | /MRC/extended/n/stem | FEI1/2 (for each frame n)
offset | /MRC/extended/n/stem | FEI1/2 (for each frame n)
stemParamReserved0 | /MRC/extended/n/stem | FEI1/2 (for each frame n)
stemParamReserved1 | /MRC/extended/n/stem | FEI1/2 (for each frame n)
stemParamReserved2 | /MRC/extended/n/stem | FEI1/2 (for each frame n)
stemParamReserved3 | /MRC/extended/n/stem | FEI1/2 (for each frame n)
stemParamReserved4 | /MRC/extended/n/stem | FEI1/2 (for each frame n)
dwellTime | /MRC/extended/n/scanSettings | FEI1/2 (for each frame n)
frameTime | /MRC/extended/n/scanSettings | FEI1/2 (for each frame n)
scanSizeLeft | /MRC/extended/n/scanSettings | FEI1/2 (for each frame n)
scanSizeTop | /MRC/extended/n/scanSettings | FEI1/2 (for each frame n)
scanSizeRight | /MRC/extended/n/scanSettings | FEI1/2 (for each frame n)
scanSizeBottom | /MRC/extended/n/scanSettings | FEI1/2 (for each frame n)
fullScanPov | /MRC/extended/n/scanSettings | FEI1/2 (for each frame n)
element | /MRC/extended/n/edxElementMaps | FEI1/2 (for each frame n)
energyIntervalLower | /MRC/extended/n/edxElementMaps | FEI1/2 (for each frame n)
energyIntervalHigher | /MRC/extended/n/edxElementMaps | FEI1/2 (for each frame n)
method | /MRC/extended/n/edxElementMaps | FEI1/2 (for each frame n)
isDoseFraction | /MRC/extended/n/doseFractions | FEI1/2 (for each frame n)
fractionNumber | /MRC/extended/n/doseFractions | FEI1/2 (for each frame n)
startFrame | /MRC/extended/n/doseFractions | FEI1/2 (for each frame n)
endFrame | /MRC/extended/n/doseFractions | FEI1/2 (for each frame n)
inputStackFilename | /MRC/extended/n/reconstruction | FEI1/2 (for each frame n)
alphaTiltMin | /MRC/extended/n/reconstruction | FEI1/2 (for each frame n)
alphaTiltMax | /MRC/extended/n/reconstruction | FEI1/2 (for each frame n)
diffractionPatternRotation | /MRC/extended/n/reconstruction | FEI2 (for each frame n)
imageRotation | /MRC/extended/n/reconstruction | FEI2 (for each frame n)
scanModeEnumeration | /MRC/extended/n/reconstruction | FEI2 (for each frame n)
acquisitionTimeStamp | /MRC/extended/n/reconstruction | FEI2 (for each frame n)
detectorCommercialName | /MRC/extended/n/reconstruction | FEI2 (for each frame n)
startTiltAngle | /MRC/extended/n/reconstruction | FEI2 (for each frame n)
endTiltAngle | /MRC/extended/n/reconstruction | FEI2 (for each frame n)
tiltPerImage | /MRC/extended/n/reconstruction | FEI2 (for each frame n)
tiltSpeed | /MRC/extended/n/reconstruction | FEI2 (for each frame n)
beamCenterPixel | /MRC/extended/n/reconstruction | FEI2 (for each frame n)
cfegFlashTimestamp | /MRC/extended/n/reconstruction | FEI2 (for each frame n)
phasePlatePositionIndex | /MRC/extended/n/reconstruction | FEI2 (for each frame n)
objectiveApertureName | /MRC/extended/n/reconstruction | FEI2 (for each frame n)
alphaTilt | /MRC/extended/n/stage | MRC2000(for each frame n)
betaTilt | /MRC/extended/n/stage | MRC2000(for each frame n)
stage | /MRC/extended/n/stage | MRC2000(for each frame n)
tiltAxisAngle | /MRC/extended/n/stage | MRC2000(for each frame n)
pixelSize | /MRC/extended/n/stage | MRC2000(for each frame n)
defocus | /MRC/extended/n/optics | MRC2000(for each frame n)
appliedDefocus | /MRC/extended/n/optics | MRC2000(for each frame n)
magnification | /MRC/extended/n/optics | MRC2000(for each frame n)
shift | /MRC/extended/n/eftemImaging | MRC2000(for each frame n)
integrationTime | /MRC/extended/n/eftemImaging | MRC2000(for each frame n)
binningWidth | /MRC/extended/n/eftemImaging | MRC2000(for each frame n)
binningHeight | /MRC/extended/n/eftemImaging | MRC2000(for each frame n)

## PNG Extractor

Extractor based on libPNG library.

Input must support seeking. Sample bit depth under 8 bits is not supported.

Supported Color spaces:

- Grayscale
- RGB/Truecolor
- Indexed/Paletted
- Grayscale and Alpha
- RGB/Truecolor and Alpha

The PNG extractor returns a readable 2D `ImageView`.

Metadata type | supported
--- | ---
ICC Profile | no
Textual information | no
Textual data (tEXt) | yes
Compressed textual data (zTXt) | yes
International textual data (iTXt) | yes
Miscellaneous information | no
Additional information (EXIF) | no

This reader uses libpng 1.6.43 Open Source license

## TIFF Extractor

Extractor based on libTIFF library.

Baseline TIFF images, following the standard specification, are supported.

Some TIFF official extension are supported too:

- Tiled images
- Data sample format
- YCbCr images
- CMYK images

Only standard metadata are supported, private and proprietary fields cannot be accessed.

Since the TIFF format is an image container, the TIFF extractor returns either:

- a readable `MultiImageView` when the file contains more than one frame.
- a readable `ImageView` when the file only contains one frame.

Supported TIFF baseline tags:

Metadata name | description | path tree location
--- | --- | ---
ImageDescription | info about image | /TIFF
Make | scanner manufacturer name | /TIFF
Model | scanner model name/number | /TIFF
Software | name & release | /TIFF
DateTime | creation date and time | /TIFF
Artist | creator of image | /TIFF
HostComputer | machine where created | /TIFF
Copyright | copyright string | /TIFF
Orientation | image orientation | /TIFF

EXIF metadata are also supported, but under the tag "EXIF" instead of "TIFF", you can see more details on these EXIF tags on the reference.

Metadata name | Data Type
--- | ---
ExposureTime | FLOAT
FNumber | FLOAT
ExposureProgram | UINT16
SpectralSensitivity | UTF8_STRING
ISOSpeedratings | UINT16 array
OECF | UINT8 array
ExifVersion | UTF8_STRING
DateTimeOriginal | UTF8_STRING
DateTimeDigitized | UTF8_STRING
ComponentsConfiguration | UINT8 array
CompressedBitserPixel | FLOAT
ShutterSpeedValue | FLOAT
ApertureValue | FLOAT
Brightnessvalue | FLOAT
ExposureBiasValue | FLOAT
MaxApertureValue | FLOAT
SubjectDistance | FLOAT
MeteringMode | UINT16
LightSource | UINT16
Flash | UINT16
FocalLength | FLOAT
SubjectArea | UINT16 array
MakerNote | UINT8 array
UserComment | UINT8 array
SubsecTime | UTF8_STRING
SubsecTimeOriginal | UTF8_STRING
SubsecTimeDigitized | UTF8_STRING
FlashpixVersion | UTF8_STRING
ColorSpace | UINT16
PixelXDimension | UINT32
PixelYDimension | UINT32
RelatedSoundFile | UTF8_STRING
FlashEnergy | FLOAT
SpatialFrenquencyResponse | UINT8 array
FocalPlaneXResolution | FLOAT
FocalPlaneYResolution | FLOAT
FocalPlaneResolutionUNIT | UINT16
SubjectLocation | UINT16 array
ExposureIndex | FLOAT
SensingMethod | UINT16
FileSource | UINT8
SceneType | UINT8
CFAPattern | UINT8 array
CustomRendered | UINT16
ExposureMode | UINT16
WhiteBalance | UINT16
DigitalZoomRatio | FLOAT
FocalLengthIn35mmFilm | UINT16
SceneCaptureType | UINT16
GainControl | FLOAT
Contrast | UINT16
Saturation | UINT16
Sharpness | UINT16
DeviceSettingDescription | UINT8 array
SubjectDistanceRange | UINT16
ImageUniqueID | UTF8_STRING

TIFF custom tags for ThermoFisher:

Metadata name | path tree location | tag identifier
--- | --- | ---
FEIMetadataINI | /TIFF | 34682
FEIMetadataXML | /TIFF | 34683
EER_ACQUISITION_METADATA | /TIFF | 65001
EER_FINAL_IMAGE_PROCESSING_METADATA | /TIFF | 65005
EER_FINAL_IMAGE_METADATA | /TIFF | 65006
XML_DEFECTS | /TIFF | 65100

- Extension tags are not tested yet.
- EXIF tags are not supported yet.

Due to TIFF format specification, in the case of a multi-frame file, retrieving the total count of frames involves reading the whole TIFF file. Depending on the input data location and the file size, this operation can last a while. The TIFF reader is optimized to only count frames when requested by the user, through the `frameCount` method in `MultiImageView` interface. You can directly request any frame without raising error, as long as this frame is present in the file.

This reader uses libTIFF 4.6.0 BSD-like licence

Specific case for format `OME-TIFF`: OME-TIFF reader (based on TIFF) provides the same metadata than TIFF. But, when a MultiImageView is returned, in some cases, `OME-XML` data, normally available in `ImageDescription` field, can be located in an external file. In this case, its content is given in MultiImageView metadata in a specific path `OME-TIFF/MetadataFile`.

If `FEIMetadataXML` metadata is present and its content is valid, it is used to determine `ImageProperties` of the image. The origin and spacing (pixel size) of the image are extracted:

- from the `Metadata.BinaryResult` section for standard FEI information.
- from the `FeiImage` section for Phenom FEI information.

## JPEG Extractor

Extractor plugin based on libjpeg-turbo library.

- Input must have seek access.
- Sample bitDepth other than 8 bits is not supported.

Supported Color spaces for output:

- JCS_GRAYSCALE
- JCS_RGB

The JPEG extractor returns a readable `ImageView`, always with two dimensions.

EXIF metadata are not supported yet.

This reader uses libjpeg-turbo v3.0.2

## OpenJPEG extractor

This extractor read JPEG2000 files using the OpenJPEG library.

This extractor needs input to support read and seek.

The `ImageView` instances returned have the `READ` capacity only, and are always two dimensional, with an `IMAGE` type.

No metadata is supported yet by the extractor.

This reader uses OpenJPEG 2.5.2

## BMP Extractor

Extractor plugin based on easyBMP library.

Input must have seek access.

Compressed files are not managed. If a BMP file has an alpha channel (i.e. 16/32bits), this channel is ignored.

The BMP extractor returns a readable `ImageView`, always with 2 dimensions.

This reader uses easybmp v1.0.6

## WEBP extractor

This extractor read WEBP files using the WEBP API library.

This extractor needs read and seek support for its input.

The `ImageView` instances returned have the `READ` capability only, and are always two dimensional, with an `IMAGE` type.

EXIF metadadata are not supported yet.

This reader uses Lib Webp 1.2.4

## GIF extractor

This plugin decodes GIF images following the GIF89a specification.

It currently has support for 8-bits indexed files only.

This extractor needs read support for its input.

The `ImageView` instances returned have the `READ` capability only. If the image holds only one image, it will have a two dimensionnal shape, and its image type will be `IMAGE`. If it holds more than one image, its image type will be `IMAGE_SEQUENCE` and its shape will be three dimensional, with the third dimension being the frame index.

This reader uses GifLib 5.2.1

## AmiraMesh extractor

This plugin decodes AmiraMesh volumes. This extractor is written from native code, without third party libraries. It does not manage meshes or colormaps (1D).

This extractor needs read support for its input.

The `ImageView` instances returned have the `READ` capability only. In case of two-dimensional images, the image type will be `IMAGE`. Otherwise, if three-dimensional, the image type will be `VOLUME`.

All metadata of the format are extracted and available in ‘/AM’ path.

Only 3D images are handled. ASCII data encoding is not managed, because it is generally used for 1D buffers.

## Digital Micrograph extractor

This plugin decodes Digital Micrograph images by Gatan. This extractor is written from native code, without third party libraries.

This extractor needs read and seek support for its input.

This extractor returns a readable `MultiImageView` containing the multiple frames contained in the DM file. All the frames are 2D `ImageView` with the `IMAGE` type.

All metadata from the format are extracted and available in the "GATAN" node.

Files with an endianess that does not match the native one are currently unsupported.

## CSV extractor

This plugin extracts data from CSV files. See RFC

This extractor is written from native code, without third party libraries.

This extractor needs read and seek support for its input.

This extractor returns a readable `DataFrameView`.

Only the following separators are supported: comma ",", semi-colon ";", pipe "|".

Files with only one column must have each line ending with a separator.

Column type is determined by checking each row content of a column. The most appropriate type will be chosen to support all the encountered situations:

- if at least one row in a column contains a string, the whole column datatype will be UTF8_STRING.
- if at least one row in a column of integer contains a float, the whole column datatype will be DOUBLE.
- if all rows of a column contain integers, the whole column datatype will be INTEGER.

## Visilog extractor

This plugin allows to extract visilog format files, and also to edit them. This extractor is written from native code, without third party libraries.

This extractor needs `READ` and `SEEK` capabilities support for its input. The image is also editable if its input supports the `WRITE` capability.

This extractor returns an `ImageView`, with the `READ` capability, and possibly `WRITE` too if its input accessor supports the `WRITE` capability.

Metadata name | Description
--- | ---
VISILOG/Software | Sofware name which generated the file
VISILOG/Date | Date the image was saved
VISILOG/Overlay | Name of the second image which is an overlay image
VISILOG/DspContext | Value of "Display Context" associated to the image
VISILOG/From file | Path of the image
VISILOG/GridName | Image mesh ("Rectangular" or "Hexagonal")
VISILOG/Calibration/c_name | Calibration name
VISILOG/Calibration/c_unit | calibration unit for X/Y/Z
VISILOG/ColorType | Color interpretation (string representation)
VISILOG/sourceX | Spectral plan name X (multispectral image only)
VISILOG/Lut | Lut name associated to the image
VISILOG/Lut/LutR | Red data of lut
VISILOG/Lut/LutG | Green data of lut
VISILOG/Lut/LutB | Blue data of lut

# Writer plugins

As extractors, writers are designated by a name, by a list of supported formats and their extensions. The name can be used to force IOFormat to write your dataset with this specific plugin. The format will be useful in the case where your plugin can handle many different formats. And of course extension could also be used to determine the output format of your dataset.

Writers can be configured with options, which are specific to each plugin. Without a configuration, default values are applied.

Here is the list of writer plugins delivered with IOFormat:

Title | Plugin Name | Supported Formats | Output extensions | ThirdParty
--- | --- | --- | --- | ---
Amira | AmiraMeshPlugin | AM | am |
CSV | CSVPlugin | CSV | csv |
Jpeg | JpegPlugin | JPEG | jpeg, jpg | libjpeg-turbo
LDM | LdmPlugin | LDM | ldm, lda |
MRC | MrcPlugin | MRC | ali, rec, mrc |
OpenJpeg | OpenJpegPlugin | JPEG2000 | jp2 | OpenJPEG
PNG | PngPlugin | PNG | png | libpng
RAW | RawPlugin | RAW | raw |
TIFF | TiffPlugin | TIFF | tiff, tif | libTIFF
Visilog | VisilogPlugin | VISILOG_3, VISILOG_4, VISILOG_5, VISILOG_6 | im3, im4, im5, im6 |
WEBP | WebPPlugin | WEBP | webp | lib Webp

## JPEG Writer

Writer plugin based on libjpeg-turbo library.

Writer accepts following kind of views as inputs:

frame | ImageView | MultiImageView
--- | --- | ---
2D | X | not supported
3D | Only with a CHANNEL dimension | not supported

Three dimensional `ImageView` instances are only supported if the image type is `MULTISPECTRAL_IMAGE`, as it defines a planar image.

Following data types are supported: `UINT8` and `VEC3_UINT`.

Image shall contain an image interpretation in properties as follows:

- `GRAYSCALE`
- `RGB` (without ALPHA)
- `UNKNOWN` (default case, datatype will determine color space according to DataType)

Metadata shall be relevant with dataset.

Jpeg writer plugin support following options:

Option name | description | range of value | Default value | comment
--- | --- | --- | --- | ---
quality | quality of compression | [0; 100] | 90 | impact the construction of the JPEG quantization tables - 100 will give a lossless result

This writer uses libjpeg-turbo v3.0.2

## PNG Writer

Writer plugin based on libPNG library.

Writer accepts following kinds of views as input:

frame | ImageView | MultiImageView
--- | --- | ---
2D | X | not supported
3D | Only with a CHANNEL dimension | not supported

Three dimensional `ImageView` instances are only supported if the image type is `MULTISPECTRAL_IMAGE`, as it defines a planar image.

Following DataTypes are supported: `UINT8`, `UINT16`, `VECx_UINT8`, `VECx_UINT16`.

Image shall contain an Image interpretation in properties as follows:

- `GRAYSCALE`
- `RGB` (with or without ALPHA)
- `UNKNOWN` (default case, datatype will determine color space automatically)

Remark:

- in the case of a 3D `ImageView`, the image is considered as 'planar', with the last dimension containing the different channels.
- in the case of a `MultiImageView`, each frame represents a channel. Of course, the frames must be correctly ordered in the MultiImageView.

PNG writer plugin support following options:

Option name | description | range of value | Default value | comment
--- | --- | --- | --- | ---
compressionlevel | level of compression | [0; 9] | 3 | The value 0 implies no compression and 9 implies maximal compression

Concerning metadata, only metadata located in "PNG" root node will be stored. Metadata located in PNG sub-tree won't be stored.

This writer uses libpng 1.6.43 Open Source license

## MRC Writer

MRC writer has been written from native code, using no third party.

Writer accepts following kinds of views as inputs:

frame | ImageView | MultiImageView
--- | --- | ---
2D | X | only with frames of same shape and datatype
3D | X | not supported

Following DataTypes are supported: `INT8`, `INT16`, `FLOAT`, `UINT16`.

Concerning metadata, only standard metadata located in "MRC" root node will be stored.

Calibration information (origin, spacing) are stored in Ångström unit. If ImageView calibration unit was different, a conversion will be attempted.

MRC writer plugin does not support any option for now.

## RAW Writer

You can choose to store your image content without encoding, which is called RAW format, even if it is not really one. Data are written directly as they are read from memory.

Writer accepts following kinds of views as inputs:

frame | ImageView | MultiImageView
--- | --- | ---
2D | X | only with frames of same shape and datatype
3D | X | only with frames of same shape and datatype
ND | X | not supported

Any DataTypes and dimensions are accepted.

## Tiff Writer

Writer plugin based on libtiff library.

Writer accepts following kinds of views as inputs:

frame | ImageView | MultiImageView
--- | --- | ---
2D | yes | yes
3D | yes | no
4D | no | no

All data types with the primitive type `UNSIGNED_INTEGER`, `SIGNED_INTEGER`, or `FLOATING_POINT` are supported, with an element count from one to four.

Output stream must support `SEEK`, `READ` and `WRITE`.

Image shall contain an Image interpretation in properties as follows:

- `GRAYSCALE`
- `RGB`
- `BINARY`: When getting a binary image as input, we binarize data and pack them to reduce storage space. `FLOATING_POINT` binary images are not supported, as they do not support binarization very well.
- `UNKNOWN`: in this case we try to guess using the number of channels.

Tiff writer plugin support following options:

- `compression`: that enables user to specify what compression algorithm to use for the image's data compression. The currently available compressions schemes are:
  - `none`: no compression.
  - `packbits`: classic TIFF compression, mostly legacy.
  - `jpeg`: using the well known JPEG encoding, that perform better with color images.
  - `lzw`: a general purpose compression, that takes time to encode, but is fast to decode.
- `bigtiff`: a value of 0 indicate that the option is disabled, and another value enables the option. Use the BigTIFF specification for the ouput, solving some problems of classic TIFF, like a limit on file size.
- `tileSize`: tile size to apply on all the frames to write. This size is a positive 2-integer-value which must be a multiple of 16 and cannot be bigger than one of the frames to write.
- `forceStrips`: a value different of 0 forces the writing with strips for all frames. The value 0 does nothing.

When input image is tiled:

- if its tile size is valid (see above), by default the written image is tiled with the same tile size.
- if its tile size is not valid, by default the written image is not tiled.
- if tile size is set by the user, the written image is tiled with the custom tile size.
- if `force strips` is set by the user, the written image is not tiled.

When input image is not tiled:

- by default the written image is not tiled.
- if tile size is set by the user, the written image is tiled with the custom tile size.

This writer supports metadata writing for baseline TIFF tags, that must be under a "TIFF" tag in the metadata tree.

Tag name | Data type | Description
--- | --- | ---
ImageDescription | UTF8_STRING | A string that describes the subject of the image.
Make | UTF8_STRING | The scanner manufacturer.
Orientation | INT16 | Orientation of the image
Model | UTF8_STRING | The scanner model name or number.
Software | UTF8_STRING | Name and version number of the software package(s) used to create the image.
DateTime | UTF8_STRING | Date and time of image creation.
Artist | UTF8_STRING | Person who created the image.
HostComputer | UTF8_STRING | The computer and/or operating system in use at the time of image creation.
Copyright | UTF8_STRING | Copyright notice.

EXIF metadata are also supported, simply extracted from the first level metadata node "EXIF". You can see more details on these EXIF tags on the reference.

You can find a listing of the EXIF tags on the TIFF reader section.

The following private tags are supported for FEI metadata handling:

Tag name | Tag | Data type | Description
--- | --- | --- | ---
FEIMetadataINI | 34682 | UTF8_STRING | FEI metadata with sections
FEIMetadataXML | 34683 | UTF8_STRING | FEI metadata as an XML document.

This writer uses libtiff 4.6.0

## OpenJPEG Writer

Writer plugin using JPEG2000 compression, based on OpenJPEG library.

View instances accepted as input:

- 2D `ImageView` instances
- 3D `ImageView` instances with an ImageType of `MULTISPECTRAL_IMAGE`

DataTypes supported:

- Unsigned integers, up to 32 bits (8, 16, and 32).
- Signed integers, up to 32 bits (8, 16, and 32).
- Vectorial variants of the ones above.

If the input image is an RGB image but does not have the RGB ImageInterpretation, some problems may occur, as OpenJPEG needs to convert to YCbCr internally, and will not do the conversion if the input color space is not specified.

OpenJpeg writer plugin supports following options:

- tileSize: the tile size to use to split the image data.
- ratio: specifies the target compression ratio.
- quality: specifies the target PSNR. the higher it is the higher the quality and the image size is. The special value 0 indicates lossless compression.

Output images are always tiled, even if you do not use the associated option, the default tiling size being 1024. By default the image is compressed using a lossless algorithm.

The ratio and quality options are mutually exclusive, activating one will deactivate the other.

This writer uses OpenJPEG 2.5.2

## LDM Writer

Writer plugin for LDM format.

View instances accepted as input:

- 2D `ImageView` instances
- 3D `ImageView` instances
- `MultiImageView` instances containing 2D frames only which can be stacked
- `LodImageView` instances (but only the high-resolution image is used)

DataTypes supported:

- Unsigned and signed integers, up to 32 bits
- Float
- Double

According to DataType support, only grayscale images are supported.

LDM writer plugin supports following options:

- tileSize: the tile size to use to split the image data (a 3-integer-value). Will impact the resolution level count.
- compressor: the compression mode can be specified by either an empty string for "no compression" mode and "GzipDataCompressor" for the Gzip compression.
- compressionLevel: integer value to indicate the level of compression (if compressor) is not set to 'no compression'. Default value is 1.
- histogram: integer value to indicate if histogram must be generated (1) or not (0).

compressionLevel option is only used if compressor option is set to "GzipDataCompressor". histogram option is only available for non-float datasets for now.

Min and Max values in header file are computed from input dataset.

Borders are not supported.

## CSV Writer

Writer for the CSV format (see [RFC 4180](rfc4180))

This plugins accepts `DataFrameView` instances as input. It currently handles the following datatypes for columns:

- signed and unsigned integers from 8 to 64 bits
- single and double precision floating-point numbers
- UTF-8 strings

The first row of the file will list the names of the columns, followed by lines of string representation of data. String columns data are quoted for more robust parsing.

This writer supports the following options:

- `delimiter`: that enables to change the string used to separate columns values.
- `display_units`: that will include the column units in the CSV header, like that `name (unit)`.

## WEBP Writer

Writer plugin based on WEBP API library.

Writer accepts following kinds of views as input:

frame | ImageView | MultiImageView
--- | --- | ---
2D | X | not supported
3D | Only with a CHANNEL dimension | not supported

Three dimensional `ImageView` instances are only supported if the image type is `MULTISPECTRAL_IMAGE`, as it defines a planar image.

Following DataTypes are supported: `UINT8` (Grayscale), `VEC2_UINT8` (GRayscale + Alpha), `VEC3_UINT8` (RGB or YCbCr) and `VEC4_UINT8` (RGBA or YCbCrA).

Image shall contain an Image interpretation in properties as follows:

- `GRAYSCALE` (with or without ALPHA)
- `RGB` (with or without ALPHA)
- `YCbCr` (with or without ALPHA)
- `UNKNOWN` (default case, `GRAYSCALE` will be chosen if DataType is UINT8 or VEC2_UINT8. Otherwise an error is raised)

Remark:

- in the case of a 3D `ImageView`, the image is considered as 'planar', with the last dimension containing the different channels.

WEBP writer plugin support following options:

Option name | description | range of value | Default value | comment
--- | --- | --- | --- | ---
lossless | data lossless | boolean | true | By default, image is compressed without any data loss
quality | encoding quality | [0, 100] | 60.0 | 0 is the fastest but gives larger files compared to the slowest, but best value 100
method | encoding method | [0, 6] | 3 | quality/speed trade-off (0=fast, 6=slower-better)
alpha_compression | alpha compression activation | boolean | true | Algorithm for encoding the alpha plane (false = none, true = compressed with WebP lossless)
alpha_quality | alpha encoding quality | [0, 100] | 100 | Between 0 (smallest size) and 100 (lossless).

Metadata are not written for now.

This writer uses Lib Webp 1.2.4

## AmiraMesh

This writer is implemented from native code, without third party libraries. It only supports volumes (3D).

frame | ImageView | MultiImageView
--- | --- | ---
2D | not supported | X (frames of same shape)
3D | X | not supported

Following primitive types are supported with cardinality from 1 to 4:

- UINT8
- INT8
- UINT16
- INT16
- UINT32
- INT32
- UINT64
- INT64
- FLOAT
- DOUBLE

(e.g. UINT8, VEC2_UINT8, VEC3_UINT8, VEC4_UINT8, INT8, VEC2_INT8....)

COMPLEX_FLOAT datatype is also supported.

AmiraMesh writer plugin supports following options:

Option name | description | range of value | Default value | comment
--- | --- | --- | --- | ---
compressor | compressor for data | string | "AUTO" | can be either "AUTO", "RAW", "RLE", "ZIP"
zipLevel | level of compression for ZIP | [0, 9] | 1 | integer value to indicate the level of ZIP compression (if compressor set to "ZIP").

If "compressor" is set to:

- "AUTO": the writer chooses the best method of compression (RLE for binary and label images, RAW for all others)
- "RAW": data is not compressed (larger files, but fastest method)
- "ZIP": data is zipped (much slower method but generates a smaller file).
- "RLE": data is compressed following RLE method. (may generate bigger files than without compression, but efficient for label and binary images)

Amira metadata are also supported, simply extracted from the first level metadata node "AM".

## Visilog Writer

Writer for the VISILOG format.

This writer only accepts ImageView as input, up to 5 dimensions.

All following datatypes are supported according to `Image interpretation`:

Image interpretation | Supported datatypes
--- | ---
BINARY | INT8, UINT8, INT16, UINT16
LABEL | UINT16, UINT32
GRAYSCALE | INT8, UINT8, INT16, UINT16, INT32, FLOAT
MULTISPECTRAL | INT8, UINT8, INT16, UINT16, INT32, FLOAT
UNKNOWN | INT8, UINT8, INT16, UINT16, INT32, FLOAT

For any other `Image interpretation`, only INT8, UINT8, INT16, UINT16, INT32 and FLOAT are supported.

The writer will store TIFF metadata from input ImageView if present, and will be reinterpreted and written as Visilog metadata:

Original Metadata path | Visilog metadata destination
--- | ---
TIFF/Artist | VISILOG/Artist
TIFF/Copyright | VISILOG/Copyright
TIFF/HostComputer | VISILOG/HostComputer
TIFF/Make | VISILOG/Make
TIFF/Model | VISILOG/Model
TIFF/Software | VISILOG/Software
TIFF/DateTime | VISILOG/Date
TIFF/ImageDescription | VISILOG/Comments and/or VISLOG/Processing [^1]

[^1] Regarding TIFF/ImageDescription, content is parsed to distinguish "Processing" and "Comments" sub-parts, so as to be interpreted as separated VISILOG metadata.

The writer will also store any VISILOG metadata from input ImageView in `VISILOG` path.