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.
…