Revisions

2024.9.20

  • Pass 5107 tests.

  • Fix writing colormap to ImageJ files (breaking).

  • Improve typing.

  • Remove support for Python 3.9.

2024.8.30

  • Support writing OME Dataset and some StructuredAnnotations elements.

2024.8.28

  • Fix LSM scan types and dimension orders (#269, breaking).

  • Use IO[bytes] instead of BinaryIO for typing (#268).

2024.8.24

  • Do not remove trailing length-1 dimension writing non-shaped file (breaking).

  • Fix writing OME-TIFF with certain modulo axes orders.

  • Make imshow NaN aware.

2024.8.10

  • Relax bitspersample check for JPEG, JPEG2K, and JPEGXL compression (#265).

2024.7.24

  • Fix reading contiguous multi-page series via Zarr store (#67).

2024.7.21

  • Fix integer overflow in product function caused by numpy types.

  • Allow tag reader functions to fail.

2024.7.2

  • Enable memmap to create empty files with non-native byte order.

  • Deprecate Python 3.9, support Python 3.13.

2024.6.18

  • Ensure TiffPage.nodata is castable to dtype (breaking, #260).

  • Support Argos AVS slides.

2024.5.22

  • Derive TiffPages, TiffPageSeries, FileSequence, StoredShape from Sequence.

  • Truncate circular IFD chain, do not raise TiffFileError (breaking).

  • Deprecate access to TiffPages.pages and FileSequence.files.

  • Enable DeprecationWarning for enums in TIFF namespace.

  • Remove some deprecated code (breaking).

  • Add iccprofile property to TiffPage and parameter to TiffWriter.write.

  • Do not detect VSI as SIS format.

  • Limit length of logged exception messages.

  • Fix docstring examples not correctly rendered on GitHub (#254, #255).

2024.5.10

  • Support reading JPEGXL compression in DNG 1.7.

  • Read invalid TIFF created by IDEAS software.

2024.5.3

  • Fix reading incompletely written LSM.

  • Fix reading Philips DP with extra rows of tiles (#253, breaking).

2024.4.24

  • Fix compatibility issue with numpy 2 (#252).

2024.4.18

  • Fix write_fsspec when last row of tiles is missing in Philips slide (#249).

  • Add option not to quote file names in write_fsspec.

  • Allow compress bilevel images with deflate, LZMA, and Zstd.

2024.2.12

  • Deprecate dtype, add chunkdtype parameter in FileSequence.asarray.

  • Add imreadargs parameters passed to FileSequence.imread.

2024.1.30

  • Fix compatibility issue with numpy 2 (#238).

  • Enable DeprecationWarning for tuple compression argument.

  • Parse sequence of numbers in xml2dict.

2023.12.9

  • Read 32-bit Indica Labs TIFF as float32.

  • Fix UnboundLocalError reading big LSM files without time axis.

  • Use os.sched_getaffinity, if available, to get the number of CPUs (#231).

  • Limit the number of default worker threads to 32.

2023.9.26

  • Lazily convert dask array to ndarray when writing.

  • Allow to specify buffersize for reading and writing.

  • Fix IndexError reading some corrupted files with ZarrTiffStore (#227).

2023.9.18

  • Raise exception when writing non-volume data with volumetric tiles (#225).

  • Improve multi-threaded writing of compressed multi-page files.

  • Fix fsspec reference for big-endian files with predictors.

2023.8.30

  • Support exclusive file creation mode (#221, #223).

2023.8.25

  • Verify shaped metadata is compatible with page shape.

  • Support out parameter when returning selection from imread (#222).

2023.8.12

  • Support decompressing EER frames.

  • Facilitate filtering logged warnings (#216).

  • Read more tags from UIC1Tag (#217).

  • Fix premature closing of files in main (#218).

  • Don’t force matplotlib backend to tkagg in main (#219).

  • Add py.typed marker.

  • Drop support for imagecodecs < 2023.3.16.

2023.7.18

  • Limit threading via TIFFFILE_NUM_THREADS environment variable (#215).

  • Remove maxworkers parameter from tiff2fsspec (breaking).

2023.7.10

  • Increase default strip size to 256 KB when writing with compression.

  • Fix ZarrTiffStore with non-default chunkmode.

2023.7.4

  • Add option to return selection from imread (#200).

  • Fix reading OME series with missing trailing frames (#199).

  • Fix fsspec reference for WebP compressed segments missing alpha channel.

  • Fix linting issues.

  • Detect files written by Agilent Technologies.

  • Drop support for Python 3.8 and numpy < 1.21 (NEP29).

2023.4.12

  • Do not write duplicate ImageDescription tags from extratags (breaking).

  • Support multifocal SVS files (#193).

  • Log warning when filtering out extratags.

  • Fix writing OME-TIFF with image description in extratags.

  • Ignore invalid predictor tag value if prediction is not used.

  • Raise KeyError if ZarrStore is missing requested chunk.

2023.3.21

  • Fix reading MMstack with missing data (#187).

2023.3.15

  • Fix corruption using tile generators with prediction/compression (#185).

  • Add parser for Micro-Manager MMStack series (breaking).

  • Return micromanager_metadata IndexMap as numpy array (breaking).

  • Revert optimizations for Micro-Manager OME series.

  • Do not use numcodecs zstd in write_fsspec (kerchunk issue 317).

  • More type annotations.

2023.2.28

  • Fix reading some Micro-Manager metadata from corrupted files.

  • Speed up reading Micro-Manager indexmap for creation of OME series.

2023.2.27

  • Use Micro-Manager indexmap offsets to create virtual TiffFrames.

  • Fixes for future imagecodecs.

2023.2.3

  • Fix overflow in calculation of databytecounts for large NDPI files.

2023.2.2

  • Fix regression reading layered NDPI files.

  • Add option to specify offset in FileHandle.read_array.

2023.1.23

  • Support reading NDTiffStorage.

  • Support reading PIXTIFF compression.

  • Support LERC with Zstd or Deflate compression.

  • Do not write duplicate and select extratags.

  • Allow to write uncompressed image data beyond 4 GB in classic TIFF.

  • Add option to specify chunkshape and dtype in FileSequence.asarray.

  • Add option for imread to write to output in FileSequence.asarray (#172).

  • Add function to read GDAL structural metadata.

  • Add function to read NDTiff.index files.

  • Fix IndexError accessing TiffFile.mdgel_metadata in non-MDGEL files.

  • Fix unclosed file ResourceWarning in TiffWriter.

  • Fix non-bool predictor arguments (#167).

  • Relax detection of OME-XML (#173).

  • Rename some TiffFrame parameters (breaking).

  • Deprecate squeeze_axes (will change signature).

  • Use defusexml in xml2dict.

2022.10.10

  • Fix RecursionError in peek_iterator.

  • Fix reading NDTiffv3 summary settings.

  • Fix svs_description_metadata parsing (#149).

  • Fix ImportError if Python was built without zlib or lzma.

  • Fix bool of COMPRESSION and PREDICTOR instances.

  • Deprecate non-sequence extrasamples arguments.

  • Parse SCIFIO metadata as ImageJ.

2022.8.12

  • Fix writing ImageJ format with hyperstack argument.

  • Fix writing description with metadata disabled.

  • Add option to disable writing shaped metadata in TiffWriter.

2022.8.8

  • Fix regression using imread out argument (#147).

  • Fix imshow show argument.

  • Support fsspec OpenFile.

2022.8.3

  • Fix regression writing default resolutionunit (#145).

  • Add strptime function parsing common datetime formats.

2022.7.31

  • Fix reading corrupted WebP compressed segments missing alpha channel (#122).

  • Fix regression reading compressed ImageJ files.

2022.7.28

  • Rename FileSequence.labels attribute to dims (breaking).

  • Rename tifffile_geodb module to geodb (breaking).

  • Rename TiffFile._astuple method to astuple (breaking).

  • Rename noplots command line argument to maxplots (breaking).

  • Fix reading ImageJ hyperstacks with non-TZC order.

  • Fix colorspace of JPEG segments encoded by Bio-Formats.

  • Fix fei_metadata for HELIOS FIB-SEM (#141, needs test).

  • Add xarray style properties to TiffPage (WIP).

  • Add option to specify OME-XML for TiffFile.

  • Add option to control multiscales in ZarrTiffStore.

  • Support writing to uncompressed ZarrTiffStore.

  • Support writing empty images with tiling.

  • Support overwriting some tag values in NDPI (#137).

  • Support Jetraw compression (experimental).

  • Standardize resolution parameter and property.

  • Deprecate third resolution argument on write (use resolutionunit).

  • Deprecate tuple type compression argument on write (use compressionargs).

  • Deprecate enums in TIFF namespace (use enums from module).

  • Improve default number of threads to write compressed segments (#139).

  • Parse metaseries time values as datetime objects (#143).

  • Increase internal read and write buffers to 256 MB.

  • Convert some warnings to debug messages.

  • Declare all classes final.

  • Add script to generate documentation via Sphinx.

  • Convert docstrings to Google style with Sphinx directives.

2022.5.4

  • Allow to write NewSubfileType=0 (#132).

  • Support writing iterators of strip or tile bytes.

  • Convert iterables (not iterators) to NumPy arrays when writing (breaking).

  • Explicitly specify optional keyword parameters for imread and imwrite.

  • Return number of written bytes from FileHandle write functions.

2022.4.28

  • Add option to specify fsspec version 1 URL template name (#131).

  • Ignore invalid dates in UIC tags (#129).

  • Fix zlib_encode and lzma_encode to work with non-contiguous arrays (#128).

  • Fix delta_encode to preserve byteorder of ndarrays.

  • Move Imagecodecs fallback functions to private module and add tests.

2022.4.26

  • Fix AttributeError in TiffFile.shaped_metadata (#127).

  • Fix TiffTag.overwrite with pre-packed binary value.

  • Write sparse TIFF if tile iterator contains None.

  • Raise ValueError when writing photometric mode with too few samples.

  • Improve test coverage.

2022.4.22

  • Add type hints for Python 3.10 (WIP).

  • Fix Mypy errors (breaking).

  • Mark many parameters positional-only or keyword-only (breaking).

  • Remove deprecated pages parameter from imread (breaking).

  • Remove deprecated compress and ijmetadata write parameters (breaking).

  • Remove deprecated fastij and movie parameters from TiffFile (breaking).

  • Remove deprecated multifile parameters from TiffFile (breaking).

  • Remove deprecated tif parameter from TiffTag.overwrite (breaking).

  • Remove deprecated file parameter from FileSequence.asarray (breaking).

  • Remove option to pass imread class to FileSequence (breaking).

  • Remove optional parameters from __str__ functions (breaking).

  • Rename TiffPageSeries.offset to dataoffset (breaking)

  • Change TiffPage.pages to None if no SubIFDs are present (breaking).

  • Change TiffPage.index to int (breaking).

  • Change TiffPage.is_contiguous, is_imagej, and is_shaped to bool (breaking).

  • Add TiffPage imagej_description and shaped_description properties.

  • Add TiffFormat abstract base class.

  • Deprecate lazyattr and use functools.cached_property instead (breaking).

  • Julian_datetime raises ValueError for dates before year 1 (breaking).

  • Regressed import time due to typing.

2022.4.8

  • Add _ARRAY_DIMENSIONS attributes to ZarrTiffStore.

  • Allow C instead of S axis when writing OME-TIFF.

  • Fix writing OME-TIFF with separate samples.

  • Fix reading unsqueezed pyramidal OME-TIFF series.

2022.3.25

  • Fix another ValueError using ZarrStore with zarr >= 2.11.0 (tiffslide #25).

  • Add parser for Hamamatsu streak metadata.

  • Improve hexdump.

2022.3.16

  • Use multi-threading to compress strips and tiles.

  • Raise TiffFileError when reading corrupted strips and tiles (#122).

  • Fix ScanImage single channel count (#121).

  • Add parser for AstroTIFF FITS metadata.

2022.2.9

  • Fix ValueError using multiscale ZarrStore with zarr >= 2.11.0.

  • Raise KeyError if ZarrStore does not contain key.

  • Limit number of warnings for missing files in multifile series.

  • Allow to save colormap to 32-bit ImageJ files (#115).

2022.2.2

  • Fix TypeError when second ImageDescription tag contains non-ASCII (#112).

  • Fix parsing IJMetadata with many IJMetadataByteCounts (#111).

  • Detect MicroManager NDTiffv2 header (not tested).

  • Remove cache from ZarrFileSequenceStore (use zarr.LRUStoreCache).

  • Raise limit on maximum number of pages.

  • Use J2K format when encoding JPEG2000 segments.

  • Formally deprecate imsave and TiffWriter.save.

  • Drop support for Python 3.7 and NumPy < 1.19 (NEP29).

2021.11.2

  • Lazy-load non-essential tag values (breaking).

  • Warn when reading from closed file.

  • Support ImageJ prop metadata type (#103).

  • Support writing indexed ImageJ format.

  • Fix multi-threaded access of multi-page Zarr stores with chunkmode 2.

  • Raise error if truncate is used with compression, packints, or tile.

  • Read STK metadata without UIC2tag.

  • Improve log and warning messages (WIP).

  • Improve string representation of large tag values.

2021.10.12

  • Revert renaming of file parameter in FileSequence.asarray (breaking).

  • Deprecate file parameter in FileSequence.asarray.

2021.10.10

  • Disallow letters as indices in FileSequence; use categories (breaking).

  • Do not warn of missing files in FileSequence; use files_missing property.

  • Support predictors in ZarrTiffStore.write_fsspec.

  • Add option to specify Zarr group name in write_fsspec.

  • Add option to specify categories for FileSequence patterns (#76).

  • Add option to specify chunk shape and dtype for ZarrFileSequenceStore.

  • Add option to tile ZarrFileSequenceStore and FileSequence.asarray.

  • Add option to pass additional zattrs to Zarr stores.

  • Detect Roche BIF files.

2021.8.30

  • Fix horizontal differencing with non-native byte order.

  • Fix multi-threaded access of memory-mappable, multi-page Zarr stores (#67).

2021.8.8

  • Fix tag offset and valueoffset for NDPI > 4 GB (#96).

2021.7.30

  • Deprecate first parameter to TiffTag.overwrite (no longer required).

  • TiffTag init API change (breaking).

  • Detect Ventana BIF series and warn that tiles are not stitched.

  • Enable reading PreviewImage from RAW formats (#93, #94).

  • Work around numpy.ndarray.tofile is very slow for non-contiguous arrays.

  • Fix issues with PackBits compression (requires imagecodecs 2021.7.30).

2021.7.2

  • Decode complex integer images found in SAR GeoTIFF.

  • Support reading NDPI with JPEG-XR compression.

  • Deprecate TiffWriter RGB auto-detection, except for RGB24/48 and RGBA32/64.

2021.6.14

  • Set stacklevel for deprecation warnings (#89).

  • Fix svs_description_metadata for SVS with double header (#88, breaking).

  • Fix reading JPEG compressed CMYK images.

  • Support ALT_JPEG and JPEG_2000_LOSSY compression found in Bio-Formats.

  • Log warning if TiffWriter auto-detects RGB mode (specify photometric).

2021.6.6

  • Fix TIFF.COMPESSOR typo (#85).

  • Round resolution numbers that do not fit in 64-bit rationals (#81).

  • Add support for JPEG XL compression.

  • Add Numcodecs compatible TIFF codec.

  • Rename ZarrFileStore to ZarrFileSequenceStore (breaking).

  • Add method to export fsspec ReferenceFileSystem from ZarrFileStore.

  • Fix fsspec ReferenceFileSystem v1 for multifile series.

  • Fix creating OME-TIFF with micron character in OME-XML.

2021.4.8

  • Fix reading OJPEG with wrong photometric or samplesperpixel tags (#75).

  • Fix fsspec ReferenceFileSystem v1 and JPEG compression.

  • Use TiffTagRegistry for NDPI_TAGS, EXIF_TAGS, GPS_TAGS, IOP_TAGS constants.

  • Make TIFF.GEO_KEYS an Enum (breaking).

2021.3.31

  • Use JPEG restart markers as tile offsets in NDPI.

  • Support version 1 and more codecs in fsspec ReferenceFileSystem (untested).

2021.3.17

  • Fix regression reading multi-file OME-TIFF with missing files (#72).

  • Fix fsspec ReferenceFileSystem with non-native byte order (#56).

2021.3.16

  • TIFF is no longer a defended trademark.

  • Add method to export fsspec ReferenceFileSystem from ZarrTiffStore (#56).

2021.3.5

  • Preliminary support for EER format (#68).

  • Do not warn about unknown compression (#68).

2021.3.4

  • Fix reading multi-file, multi-series OME-TIFF (#67).

  • Detect ScanImage 2021 files (#46).

  • Shape new version ScanImage series according to metadata (breaking).

  • Remove Description key from TiffFile.scanimage_metadata dict (breaking).

  • Also return ScanImage version from read_scanimage_metadata (breaking).

  • Fix docstrings.

2021.2.26

  • Squeeze axes of LSM series by default (breaking).

  • Add option to preserve single dimensions when reading from series (WIP).

  • Do not allow appending to OME-TIFF files.

  • Fix reading STK files without name attribute in metadata.

  • Make TIFF constants multi-thread safe and pickleable (#64).

  • Add detection of NDTiffStorage MajorVersion to read_micromanager_metadata.

  • Support ScanImage v4 files in read_scanimage_metadata.

2021.2.1

  • Fix multi-threaded access of ZarrTiffStores using same TiffFile instance.

  • Use fallback zlib and lzma codecs with imagecodecs lite builds.

  • Open Olympus and Panasonic RAW files for parsing, albeit not supported.

  • Support X2 and X4 differencing found in DNG.

  • Support reading JPEG_LOSSY compression found in DNG.

2021.1.14

  • Try ImageJ series if OME series fails (#54)

  • Add option to use pages as chunks in ZarrFileStore (experimental).

  • Fix reading from file objects with no readinto function.

2021.1.11

  • Fix test errors on PyPy.

  • Fix decoding bitorder with imagecodecs >= 2021.1.11.

2021.1.8

  • Decode float24 using imagecodecs >= 2021.1.8.

  • Consolidate reading of segments if possible.

2020.12.8

  • Fix corrupted ImageDescription in multi shaped series if buffer too small.

  • Fix libtiff warning that ImageDescription contains null byte in value.

  • Fix reading invalid files using JPEG compression with palette colorspace.

2020.12.4

  • Fix reading some JPEG compressed CFA images.

  • Make index of SubIFDs a tuple.

  • Pass through FileSequence.imread arguments in imread.

  • Do not apply regex flags to FileSequence axes patterns (breaking).

2020.11.26

  • Add option to pass axes metadata to ImageJ writer.

  • Pad incomplete tiles passed to TiffWriter.write (#38).

  • Split TiffTag constructor (breaking).

  • Change TiffTag.dtype to TIFF.DATATYPES (breaking).

  • Add TiffTag.overwrite method.

  • Add script to change ImageDescription in files.

  • Add TiffWriter.overwrite_description method (WIP).

2020.11.18

  • Support writing SEPARATED color space (#37).

  • Use imagecodecs.deflate codec if available.

  • Fix SCN and NDPI series with Z dimensions.

  • Add TiffReader alias for TiffFile.

  • TiffPage.is_volumetric returns True if ImageDepth > 1.

  • Zarr store getitem returns NumPy arrays instead of bytes.

2020.10.1

  • Formally deprecate unused TiffFile parameters (scikit-image #4996).

2020.9.30

  • Allow to pass additional arguments to compression codecs.

  • Deprecate TiffWriter.save method (use TiffWriter.write).

  • Deprecate TiffWriter.save compress parameter (use compression).

  • Remove multifile parameter from TiffFile (breaking).

  • Pass all is_flag arguments from imread to TiffFile.

  • Do not byte-swap JPEG2000, WEBP, PNG, JPEGXR segments in TiffPage.decode.

2020.9.29

  • Fix reading files produced by ScanImage > 2015 (#29).

2020.9.28

  • Derive ZarrStore from MutableMapping.

  • Support zero shape ZarrTiffStore.

  • Fix ZarrFileStore with non-TIFF files.

  • Fix ZarrFileStore with missing files.

  • Cache one chunk in ZarrFileStore.

  • Keep track of already opened files in FileCache.

  • Change parse_filenames function to return zero-based indices.

  • Remove reopen parameter from asarray (breaking).

  • Rename FileSequence.fromfile to imread (breaking).

2020.9.22

  • Add experimental Zarr storage interface (WIP).

  • Remove unused first dimension from TiffPage.shaped (breaking).

  • Move reading of STK planes to series interface (breaking).

  • Always use virtual frames for ScanImage files.

  • Use DimensionOrder to determine axes order in OmeXml.

  • Enable writing striped volumetric images.

  • Keep complete dataoffsets and databytecounts for TiffFrames.

  • Return full size tiles from Tiffpage.segments.

  • Rename TiffPage.is_sgi property to is_volumetric (breaking).

  • Rename TiffPageSeries.is_pyramid to is_pyramidal (breaking).

  • Fix TypeError when passing jpegtables to non-JPEG decode method (#25).

2020.9.3

  • Do not write contiguous series by default (breaking).

  • Allow to write to SubIFDs (WIP).

  • Fix writing F-contiguous NumPy arrays (#24).

2020.8.25

  • Do not convert EPICS timeStamp to datetime object.

  • Read incompletely written Micro-Manager image file stack header (#23).

  • Remove tag 51123 values from TiffFile.micromanager_metadata (breaking).

2020.8.13

  • Use tifffile metadata over OME and ImageJ for TiffFile.series (breaking).

  • Fix writing iterable of pages with compression (#20).

  • Expand error checking of TiffWriter data, dtype, shape, and tile arguments.

2020.7.24

  • Parse nested OmeXml metadata argument (WIP).

  • Do not lazy load TiffFrame JPEGTables.

  • Fix conditionally skipping some tests.

2020.7.22

  • Do not auto-enable OME-TIFF if description is passed to TiffWriter.save.

  • Raise error writing empty bilevel or tiled images.

  • Allow to write tiled bilevel images.

  • Allow to write multi-page TIFF from iterable of single page images (WIP).

  • Add function to validate OME-XML.

  • Correct Philips slide width and length.

2020.7.17

  • Initial support for writing OME-TIFF (WIP).

  • Return samples as separate dimension in OME series (breaking).

  • Fix modulo dimensions for multiple OME series.

  • Fix some test errors on big endian systems (#18).

  • Fix BytesWarning.

  • Allow to pass TIFF.PREDICTOR values to TiffWriter.save.

2020.7.4

  • Deprecate support for Python 3.6 (NEP 29).

  • Move pyramidal subresolution series to TiffPageSeries.levels (breaking).

  • Add parser for SVS, SCN, NDPI, and QPI pyramidal series.

  • Read single-file OME-TIFF pyramids.

  • Read NDPI files > 4 GB (#15).

  • Include SubIFDs in generic series.

  • Preliminary support for writing packed integer arrays (#11, WIP).

  • Read more LSM info subrecords.

  • Fix missing ReferenceBlackWhite tag for YCbCr photometrics.

  • Fix reading lossless JPEG compressed DNG files.

2020.6.3

  • Support os.PathLike file names (#9).

2020.5.30

  • Re-add pure Python PackBits decoder.

2020.5.25

  • Make imagecodecs an optional dependency again.

  • Disable multi-threaded decoding of small LZW compressed segments.

  • Fix caching of TiffPage.decode method.

  • Fix xml.etree.cElementTree ImportError on Python 3.9.

  • Fix tostring DeprecationWarning.

2020.5.11

  • Fix reading ImageJ grayscale mode RGB images (#6).

  • Remove napari reader plugin.

2020.5.7

  • Add napari reader plugin (tentative).

  • Fix writing single tiles larger than image data (#3).

  • Always store ExtraSamples values in tuple (breaking).

2020.5.5

  • Allow to write tiled TIFF from iterable of tiles (WIP).

  • Add method to iterate over decoded segments of TiffPage (WIP).

  • Pass chunks of segments to ThreadPoolExecutor.map to reduce memory usage.

  • Fix reading invalid files with too many strips.

  • Fix writing over-aligned image data.

  • Detect OME-XML without declaration (#2).

  • Support LERC compression (WIP).

  • Delay load imagecodecs functions.

  • Remove maxsize parameter from asarray (breaking).

  • Deprecate ijmetadata parameter from TiffWriter.save (use metadata).

2020.2.16

  • Add method to decode individual strips or tiles.

  • Read strips and tiles in order of their offsets.

  • Enable multi-threading when decompressing multiple strips.

  • Replace TiffPage.tags dictionary with TiffTags (breaking).

  • Replace TIFF.TAGS dictionary with TiffTagRegistry.

  • Remove TIFF.TAG_NAMES (breaking).

  • Improve handling of TiffSequence parameters in imread.

  • Match last uncommon parts of file paths to FileSequence pattern (breaking).

  • Allow letters in FileSequence pattern for indexing well plate rows.

  • Allow to reorder axes in FileSequence.

  • Allow to write > 4 GB arrays to plain TIFF when using compression.

  • Allow to write zero size NumPy arrays to nonconformant TIFF (tentative).

  • Fix xml2dict.

  • Require imagecodecs >= 2020.1.31.

  • Remove support for imagecodecs-lite (breaking).

  • Remove verify parameter to asarray method (breaking).

  • Remove deprecated lzw_decode functions (breaking).

  • Remove support for Python 2.7 and 3.5 (breaking).

2019.7.26

  • Fix infinite loop reading more than two tags of same code in IFD.

  • Delay import of logging module.

2019.7.20

  • Fix OME-XML detection for files created by Imaris.

  • Remove or replace assert statements.

2019.7.2

  • Do not write SampleFormat tag for unsigned data types.

  • Write ByteCount tag values as SHORT or LONG if possible.

  • Allow to specify axes in FileSequence pattern via group names.

  • Add option to concurrently read FileSequence using threads.

  • Derive TiffSequence from FileSequence.

  • Use str(datetime.timedelta) to format Timer duration.

  • Use perf_counter for Timer if possible.

2019.6.18

  • Fix reading planar RGB ImageJ files created by Bio-Formats.

  • Fix reading single-file, multi-image OME-TIFF without UUID.

  • Presume LSM stores uncompressed images contiguously per page.

  • Reformat some complex expressions.

2019.5.30

  • Ignore invalid frames in OME-TIFF.

  • Set default subsampling to (2, 2) for RGB JPEG compression.

  • Fix reading and writing planar RGB JPEG compression.

  • Replace buffered_read with FileHandle.read_segments.

  • Include page or frame numbers in exceptions and warnings.

  • Add Timer class.

2019.5.22

  • Add optional chroma subsampling for JPEG compression.

  • Enable writing PNG, JPEG, JPEGXR, and JPEG2K compression (WIP).

  • Fix writing tiled images with WebP compression.

  • Improve handling GeoTIFF sparse files.

2019.3.18

  • Fix regression decoding JPEG with RGB photometrics.

  • Fix reading OME-TIFF files with corrupted but unused pages.

  • Allow to load TiffFrame without specifying keyframe.

  • Calculate virtual TiffFrames for non-BigTIFF ScanImage files > 2GB.

  • Rename property is_chroma_subsampled to is_subsampled (breaking).

  • Make more attributes and methods private (WIP).

2019.3.8

  • Fix MemoryError when RowsPerStrip > ImageLength.

  • Fix SyntaxWarning on Python 3.8.

  • Fail to decode JPEG to planar RGB (tentative).

  • Separate public from private test files (WIP).

  • Allow testing without data files or imagecodecs.

2019.2.22

  • Use imagecodecs-lite as fallback for imagecodecs.

  • Simplify reading NumPy arrays from file.

  • Use TiffFrames when reading arrays from page sequences.

  • Support slices and iterators in TiffPageSeries sequence interface.

  • Auto-detect uniform series.

  • Use page hash to determine generic series.

  • Turn off TiffPages cache (tentative).

  • Pass through more parameters in imread.

  • Discontinue movie parameter in imread and TiffFile (breaking).

  • Discontinue bigsize parameter in imwrite (breaking).

  • Raise TiffFileError in case of issues with TIFF structure.

  • Return TiffFile.ome_metadata as XML (breaking).

  • Ignore OME series when last dimensions are not stored in TIFF pages.

2019.2.10

  • Assemble IFDs in memory to speed-up writing on some slow media.

  • Handle discontinued arguments fastij, multifile_close, and pages.

2019.1.30

  • Use black background in imshow.

  • Do not write datetime tag by default (breaking).

  • Fix OME-TIFF with SamplesPerPixel > 1.

  • Allow 64-bit IFD offsets for NDPI (files > 4GB still not supported).

2019.1.4

  • Fix decoding deflate without imagecodecs.

2019.1.1

  • Update copyright year.

  • Require imagecodecs >= 2018.12.16.

  • Do not use JPEG tables from keyframe.

  • Enable decoding large JPEG in NDPI.

  • Decode some old-style JPEG.

  • Reorder OME channel axis to match PlanarConfiguration storage.

  • Return tiled images as contiguous arrays.

  • Add decode_lzw proxy function for compatibility with old czifile module.

  • Use dedicated logger.

2018.11.28

  • Make SubIFDs accessible as TiffPage.pages.

  • Make parsing of TiffSequence axes pattern optional (breaking).

  • Limit parsing of TiffSequence axes pattern to file names, not path names.

  • Do not interpolate in imshow if image dimensions <= 512, else use bilinear.

  • Use logging.warning instead of warnings.warn in many cases.

  • Fix NumPy FutureWarning for out == ‘memmap’.

  • Adjust ZSTD and WebP compression to libtiff-4.0.10 (WIP).

  • Decode old-style LZW with imagecodecs >= 2018.11.8.

  • Remove TiffFile.qptiff_metadata (QPI metadata are per page).

  • Do not use keyword arguments before variable positional arguments.

  • Make either all or none return statements in function return expression.

  • Use pytest parametrize to generate tests.

  • Replace test classes with functions.

2018.11.6

  • Rename imsave function to imwrite.

  • Re-add Python implementations of packints, delta, and bitorder codecs.

  • Fix TiffFrame.compression AttributeError.

2018.10.18

  • Rename tiffile package to tifffile.

2018.10.10

  • Read ZIF, the Zoomable Image Format (WIP).

  • Decode YCbCr JPEG as RGB (tentative).

  • Improve restoration of incomplete tiles.

  • Allow to write grayscale with extrasamples without specifying planarconfig.

  • Enable decoding of PNG and JXR via imagecodecs.

  • Deprecate 32-bit platforms (too many memory errors during tests).

2018.9.27

  • Read Olympus SIS (WIP).

  • Allow to write non-BigTIFF files up to ~4 GB (fix).

  • Fix parsing date and time fields in SEM metadata.

  • Detect some circular IFD references.

  • Enable WebP codecs via imagecodecs.

  • Add option to read TiffSequence from ZIP containers.

  • Remove TiffFile.isnative.

  • Move TIFF struct format constants out of TiffFile namespace.

2018.8.31

  • Fix wrong TiffTag.valueoffset.

  • Towards reading Hamamatsu NDPI (WIP).

  • Enable PackBits compression of byte and bool arrays.

  • Fix parsing NULL terminated CZ_SEM strings.

2018.8.24

  • Move tifffile.py and related modules into tiffile package.

  • Move usage examples to module docstring.

  • Enable multi-threading for compressed tiles and pages by default.

  • Add option to concurrently decode image tiles using threads.

  • Do not skip empty tiles (fix).

  • Read JPEG and J2K compressed strips and tiles.

  • Allow floating-point predictor on write.

  • Add option to specify subfiletype on write.

  • Depend on imagecodecs package instead of _tifffile, lzma, etc modules.

  • Remove reverse_bitorder, unpack_ints, and decode functions.

  • Use pytest instead of unittest.

2018.6.20

  • Save RGBA with unassociated extrasample by default (breaking).

  • Add option to specify ExtraSamples values.

2018.6.17 (included with 0.15.1)

  • Towards reading JPEG and other compressions via imagecodecs package (WIP).

  • Read SampleFormat VOID as UINT.

  • Add function to validate TIFF using jhove -m TIFF-hul.

  • Save bool arrays as bilevel TIFF.

  • Accept pathlib.Path as filenames.

  • Move software argument from TiffWriter __init__ to save.

  • Raise DOS limit to 16 TB.

  • Lazy load LZMA and ZSTD compressors and decompressors.

  • Add option to save IJMetadata tags.

  • Return correct number of pages for truncated series (fix).

  • Move EXIF tags to TIFF.TAG as per TIFF/EP standard.

2018.2.18

  • Always save RowsPerStrip and Resolution tags as required by TIFF standard.

  • Do not use badly typed ImageDescription.

  • Coerce bad ASCII string tags to bytes.

  • Tuning of __str__ functions.

  • Fix reading undefined tag values.

  • Read and write ZSTD compressed data.

  • Use hexdump to print bytes.

  • Determine TIFF byte order from data dtype in imsave.

  • Add option to specify RowsPerStrip for compressed strips.

  • Allow memory-map of arrays with non-native byte order.

  • Attempt to handle ScanImage <= 5.1 files.

  • Restore TiffPageSeries.pages sequence interface.

  • Use numpy.frombuffer instead of fromstring to read from binary data.

  • Parse GeoTIFF metadata.

  • Add option to apply horizontal differencing before compression.

  • Towards reading PerkinElmer QPI (QPTIFF, no test files).

  • Do not index out of bounds data in tifffile.c unpackbits and decodelzw.

2017.9.29

  • Many backward incompatible changes improving speed and resource usage:

  • Add detail argument to __str__ function. Remove info functions.

  • Fix potential issue correcting offsets of large LSM files with positions.

  • Remove TiffFile sequence interface; use TiffFile.pages instead.

  • Do not make tag values available as TiffPage attributes.

  • Use str (not bytes) type for tag and metadata strings (WIP).

  • Use documented standard tag and value names (WIP).

  • Use enums for some documented TIFF tag values.

  • Remove memmap and tmpfile options; use out=’memmap’ instead.

  • Add option to specify output in asarray functions.

  • Add option to concurrently decode pages using threads.

  • Add TiffPage.asrgb function (WIP).

  • Do not apply colormap in asarray.

  • Remove colormapped, rgbonly, and scale_mdgel options from asarray.

  • Consolidate metadata in TiffFile _metadata functions.

  • Remove non-tag metadata properties from TiffPage.

  • Add function to convert LSM to tiled BIN files.

  • Align image data in file.

  • Make TiffPage.dtype a numpy.dtype.

  • Add ndim and size properties to TiffPage and TiffPageSeries.

  • Allow imsave to write non-BigTIFF files up to ~4 GB.

  • Only read one page for shaped series if possible.

  • Add memmap function to create memory-mapped array stored in TIFF file.

  • Add option to save empty arrays to TIFF files.

  • Add option to save truncated TIFF files.

  • Allow single tile images to be saved contiguously.

  • Add optional movie mode for files with uniform pages.

  • Lazy load pages.

  • Use lightweight TiffFrame for IFDs sharing properties with key TiffPage.

  • Move module constants to TIFF namespace (speed up module import).

  • Remove fastij option from TiffFile.

  • Remove pages parameter from TiffFile.

  • Remove TIFFfile alias.

  • Deprecate Python 2.

  • Require enum34 and futures packages on Python 2.7.

  • Remove Record class and return all metadata as dict instead.

  • Add functions to parse STK, MetaSeries, ScanImage, SVS, Pilatus metadata.

  • Read tags from EXIF and GPS IFDs.

  • Use pformat for tag and metadata values.

  • Fix reading some UIC tags.

  • Do not modify input array in imshow (fix).

  • Fix Python implementation of unpack_ints.

2017.5.23

  • Write correct number of SampleFormat values (fix).

  • Use Adobe deflate code to write ZIP compressed files.

  • Add option to pass tag values as packed binary data for writing.

  • Defer tag validation to attribute access.

  • Use property instead of lazyattr decorator for simple expressions.

2017.3.17

  • Write IFDs and tag values on word boundaries.

  • Read ScanImage metadata.

  • Remove is_rgb and is_indexed attributes from TiffFile.

  • Create files used by doctests.

2017.1.12 (included with scikit-image 0.14.x)

  • Read Zeiss SEM metadata.

  • Read OME-TIFF with invalid references to external files.

  • Rewrite C LZW decoder (5x faster).

  • Read corrupted LSM files missing EOI code in LZW stream.

2017.1.1

  • Add option to append images to existing TIFF files.

  • Read files without pages.

  • Read S-FEG and Helios NanoLab tags created by FEI software.

  • Allow saving Color Filter Array (CFA) images.

  • Add info functions returning more information about TiffFile and TiffPage.

  • Add option to read specific pages only.

  • Remove maxpages argument (breaking).

  • Remove test_tifffile function.

2016.10.28

  • Improve detection of ImageJ hyperstacks.

  • Read TVIPS metadata created by EM-MENU (by Marco Oster).

  • Add option to disable using OME-XML metadata.

  • Allow non-integer range attributes in modulo tags (by Stuart Berg).

2016.6.21

  • Do not always memmap contiguous data in page series.

2016.5.13

  • Add option to specify resolution unit.

  • Write grayscale images with extra samples when planarconfig is specified.

  • Do not write RGB color images with 2 samples.

  • Reorder TiffWriter.save keyword arguments (breaking).

2016.4.18

  • TiffWriter, imread, and imsave accept open binary file streams.

2016.04.13

  • Fix reversed fill order in 2 and 4 bps images.

  • Implement reverse_bitorder in C.

2016.03.18

  • Fix saving additional ImageJ metadata.

2016.2.22

  • Write 8 bytes double tag values using offset if necessary (bug fix).

  • Add option to disable writing second image description tag.

  • Detect tags with incorrect counts.

  • Disable color mapping for LSM.

2015.11.13

  • Read LSM 6 mosaics.

  • Add option to specify directory of memory-mapped files.

  • Add command line options to specify vmin and vmax values for colormapping.

2015.10.06

  • New helper function to apply colormaps.

  • Renamed is_palette attributes to is_indexed (breaking).

  • Color-mapped samples are now contiguous (breaking).

  • Do not color-map ImageJ hyperstacks (breaking).

  • Towards reading Leica SCN.

2015.9.25

  • Read images with reversed bit order (FillOrder is LSB2MSB).

2015.9.21

  • Read RGB OME-TIFF.

  • Warn about malformed OME-XML.

2015.9.16

  • Detect some corrupted ImageJ metadata.

  • Better axes labels for shaped files.

  • Do not create TiffTag for default values.

  • Chroma subsampling is not supported.

  • Memory-map data in TiffPageSeries if possible (optional).

2015.8.17

  • Write ImageJ hyperstacks (optional).

  • Read and write LZMA compressed data.

  • Specify datetime when saving (optional).

  • Save tiled and color-mapped images (optional).

  • Ignore void bytecounts and offsets if possible.

  • Ignore bogus image_depth tag created by ISS Vista software.

  • Decode floating-point horizontal differencing (not tiled).

  • Save image data contiguously if possible.

  • Only read first IFD from ImageJ files if possible.

  • Read ImageJ raw format (files larger than 4 GB).

  • TiffPageSeries class for pages with compatible shape and data type.

  • Try to read incomplete tiles.

  • Open file dialog if no filename is passed on command line.

  • Ignore errors when decoding OME-XML.

  • Rename decoder functions (breaking).

2014.8.24

  • TiffWriter class for incremental writing images.

  • Simplify examples.

2014.8.19

  • Add memmap function to FileHandle.

  • Add function to determine if image data in TiffPage is memory-mappable.

  • Do not close files if multifile_close parameter is False.

2014.8.10

  • Return all extrasamples by default (breaking).

  • Read data from series of pages into memory-mapped array (optional).

  • Squeeze OME dimensions (breaking).

  • Workaround missing EOI code in strips.

  • Support image and tile depth tags (SGI extension).

  • Better handling of STK/UIC tags (breaking).

  • Disable color mapping for STK.

  • Julian to datetime converter.

  • TIFF ASCII type may be NULL separated.

  • Unwrap strip offsets for LSM files greater than 4 GB.

  • Correct strip byte counts in compressed LSM files.

  • Skip missing files in OME series.

  • Read embedded TIFF files.

2014.2.05

  • Save rational numbers as type 5 (bug fix).

2013.12.20

  • Keep other files in OME multi-file series closed.

  • FileHandle class to abstract binary file handle.

  • Disable color mapping for bad OME-TIFF produced by bio-formats.

  • Read bad OME-XML produced by ImageJ when cropping.

2013.11.3

  • Allow zlib compress data in imsave function (optional).

  • Memory-map contiguous image data (optional).

2013.10.28

  • Read MicroManager metadata and little-endian ImageJ tag.

  • Save extra tags in imsave function.

  • Save tags in ascending order by code (bug fix).

2012.10.18

  • Accept file like objects (read from OIB files).

2012.8.21

  • Rename TIFFfile to TiffFile and TIFFpage to TiffPage.

  • TiffSequence class for reading sequence of TIFF files.

  • Read UltraQuant tags.

  • Allow float numbers as resolution in imsave function.

2012.8.3

  • Read MD GEL tags and NIH Image header.

2012.7.25

  • Read ImageJ tags.