All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Avoid exception when n_frames is not set by Pillow (
d03db0f
) - Forward get_reader/get_writer kwargs to read/write (#979) (
a82037e
) - Allow incremental write in pillow (#978) (
2ed8fb4
) - Add
writeable_output=True
to pillow plugin to ensure data is writable by default (#976) (6412c98
)
- Refactor invoke in no-internet CI (#986) (
a945675
) - Fixed typo in CI script (#985) (
a2428d3
) - Fix typo in PyPI link tooltip (#980) (
d2654ba
) - Generate images in temporary folders (#977) (
b4fc971
)
- Consistently apply color palettes by default (#955) (
938de2d
) - Allow ffmpeg filters to terminate iter (#954) (
a463899
) - Handle unknown video duration in pyav metadata (#937) (
06a1c0d
)
- Remove pypy 3.7 testing and improve CI/CD scripts (#964) (
b439803
) - Several doc improvements (#959) (
ecb6773
) - Add GH Sponsors link (
0e13f64
)
- Exclude py3.11 on windows (#917) (
c57e31c
) - GitHub Actions add Python 3.11 to the testing (#916) (
8d49551
) - Add migration instructions for as_gray in new pillow plugin. (#913) (
b3b040a
)
- Fix silent failure when writing gray images with explicit color channel using pillow (#906) (
a075c17
) - Ffmpeg supports .h264 extension (#901) (
7571ea9
) - Avoid webcam hang on MacOS (#899) (
019069f
)
- Add a migration note about pillow squeezing (#850) (
7c55a55
) - Add missin option to imwrite type hints (#848) (
6da4a42
) - Ignore exclude_applied on legacy plugins (#844) (
f082dde
) - Remove unneeded CD steps (#847) (
0d99c51
)
- Fix typos in v3 narrative docs. (#835) (
d68f16b
) - Point source links to github (#834) (
20eef2a
) - Remove outdated numpy minimum version (#833) (
39947a7
)
- Resolve infinite recursion in python 3.11 (and add CI for pypy-3.9) (#826) (
301f941
) - Include PYI files in package (#825) (
fff16fb
)
- Reset request when iterating over plugins (#792) (
46a49c4
) - Rename format_hint to extension and prefer it over actual file extensions (#807) (
4830f15
)
- Do not pass optional kwargs by position in tifffile (#794) (
512fe11
) - Ensure pts increases even if pyav doesn't flush the frame immediately (#787) (
5b74e8d
)
- Better Type Annotations + mypy support (#784) (
607600d
) - Add fast-paths for pyav formats (#785) (
13cb5e2
) - Update readme (#786) (
7f1bb1d
) - Fix docs on standard images (#783) (
7c65efa
)
- Handle PIL paletts with <256 color palettes (#775) (
309242d
) - Set spacing to None by default (#773) (
1b93434
)
- Deprecation warnings to transition to v3 (#769) (
fba08a7
) - Remove unused test file (#780) (
9f8d296
) - Update license (#771) (
ec9de36
) - Build docs using python 3.10 (#770) (
8b563f5
) - Note on preferring venv (#768) (
cd25e19
) - V3 API docs (#718) (
6c47524
) - Update DOI (#764) (
2cf60c1
) - Cleanly determine write format in pillow (#752) (
8cba510
)
- Make RTD fail on warnings during CI (#747) (
252839c
) - Add missing ! to download tracker banner (#746) (
8e8c546
) - Remove link to download tracker (#744) (
33fe89f
) - Type annotations for pillow (#743) (
269d9e1
) - Contribution guidelines (#729) (
ff2e3fd
) - Deprecate python 3.6 support (#740) (
e104505
)
- Add repo to PYTHONPATH in
should_release?
(#728) (a22d810
) - Reorganize commit tags (#717) (
c57bf85
) - Reduce release frequency to weekly (#716) (
51f552b
)
- Clean up PillowPlugin destructor (#714) (
104171b
) - Close standard streams after webcam access (#711) (
9c434e0
)
- Allow pillow to write/encode to byte strings (#669) (
b5df806
) - Add CD pipeline (#667) (
6dce3ab
) - Fail PIL write if extension isnt supported (
0dc33d3
) - Make imopen use core.Request (
c51fdb0
)
- Bump pillow to 8.3.2 (#661) (
a5ce49f
) - Undo previous commit (
f4c2e74
) - Bump required pillow version (
1a4456c
) - Avoid pillow 8.3.0 (#656) (
abe3cc2
) - Close request if no backend was found (
1f8ff6b
) - Introduce InitializationError (
974fdc5
) - Linting (
e25f06f
) - Merge master into feature (
6576783
) - Instantiate plugins once (
081f3e6
) - Make FITS the preferred plugin for FITS files (#637) (
6fbab81
) - Remove compromised token (#635) (
7fdc558
) - Get images from imageio not firefoxmetzger (
9da8339
) - Throw-away requests for get_reader/get_writer (
cf83968
) - Black + flake8 (
53ed8d8
) - Test mvolread with mvol image (
3a03d26
) - Investigate pypy failure (
9d63acc
) - Remove dublicate checks (
7148fa9
) - Remove dublicate code (
9a99417
) - Flake8 + black (
42a02ed
) - Raise error for invalud modes in py3.6 (
c91ae9c
) - Black + flake8 (
abe7199
) - Pillow changed gif reading. updating test (
2ebe936
) - Flake8 (
6debb11
) - Blackify (
6676a62
) - New black formatting rules (#630) (
659f4f7
) - Merge master into branch (
edad86f
) - Make Request.Mode an enum (#622) (
dc2d06b
) - Fix highlighting of installation command (#615) (
9df61d2
) - Remove double import (
388e57d
) - Merge master into v3.0.0 (
7443ffd
)
- Refactor plugin docs (#666) (
787db4b
) - Fix typo (#659) (
bb13525
) - Fixed Typo (#653) (
eb24eaa
) - Update DOI (#650) (
b4f186f
) - Added missing docstring to function (
6625430
) - Clarify missing method (
2fd5116
) - Update Website Link (#634) (
2f058d7
) - Polish imopen docstrings (
7052cd8
) - Clarify documentation on .tif handling (#625) (
68bb515
) - Add repo location to developer instructions (#584) (
2ce79b9
)
- More robust loading of FEI SEM data (#529 by jon-lab).
- Fix webcam not working on Win10 (#525).
- Add a few standard images useful to 3D visualization.
- The timeout used in HTTP requests can now be set with an environment variable (#534 by Johann Neuhauser).
- The DICOM plugin can now used gdcm for compressed transfer formats.
- Better support for itk/sitk plugins (#530 by Jonathan Daniel).
- Test coverage and CI for ARM (#518 by odidev).
(skipping version 2.7 to avoid confusion with Python v2.7.)
Mentioning here for completeness: imageio-ffmpeg 0.4.0 was also recently released, which fixes several (stability) issues for video io.
- Better support for reading from http (some formats needed seek, we now deal with that).
- Make
Reader.__len__
work again when length is inf (stream/unknown). - Set
-framerate
input param for ffmpeg when using webcam, fixing webcam support on macOS. - Fix for handling TIFF predictor value of 1 (NONE) (by Milos Komarcevic).
- Fix false-positive zip detection (by Vsevolod Poletaev).
- Fix SPE filesize check for SPE v3 (by Antony Lee).
- Fix that SPE plugin failed on spe3 files with dtype uint32 (by Michael Schneider).
- Fix deprecation warning for numpy.
- Expose SPE3 xml footer (by Antony Lee).
- Expose TIFF predictor tag for reading and writing (by Milos Komarcevic).
- Improve error message regarding modes.
- Drop support for Python 2.7 and Python 3.4.
- Drop support for AVbin, use ffmpeg instead.
- Fixed potential error when creating a new appdata directory.
This will likely be the last release to support Python 2.7.
Fixed:
- Fixed a security vulnerability for Windows users that have dcmtk installed, and where an attacker can set the filename.
- Fixed bug in
image_as_uint
(#451 by clintg6). - Fix that only one webcam could be used when two cameras are connected that have the same name.
- Prevent paletted image with transparency to be converted to grayscale.
Added:
- Optimise 16-bit PNG write performance for newer versions of Pillow (#440 by Ariel Ladegaard).
- More flexible setting of memory limit in
mimread
andmvolread
(#442 by Chris Barnes). - Support for ASCII PNM files (#447 by Tobias Baumann).
- Improved support for JPEG2000 (can now provide parameters) (#456 by Pawel Korus).
- Added support for compressed FITS images (#458 by Joe Singleton).
- Improve imageio import time by avoiding pkg_resources import (#462 by Mark Harfouche).
- Added example for compressing GIFs using pygifsicle (#481 by Luca Cappelletti).
The ffmpeg plugin has been refactored:
- The core has been moved to a new library: imageio-ffmpeg.
- That library provides platform-specific wheels that includes ffmpeg,
so just
pip install imageio-ffmpeg
instead of the download step. - Note that this new library is py3k only.
- Termination of ffmpeg subprocess is now more reliable.
- The reader of the ffmpeg plugin now always reports
inf
as the number of frames. Usereader.count_frames()
to get the actual number, or estimate it from the fps and duration in the meta data. - Removed
CannotReadFrameError
.
Other changes:
- The avbin plugin has been depreacted and will be removed in a future version.
- Imnproved speed for PIL and FFMPEG plugsins by avoiding memory copies.
- Update the included tiffile library.
- Support for SimpleITK.
- Speed up tiffile plugin when writing to something else than a filename.
- Fix that writing to a file object would not work for some plugins.
- Can now pass image data to the write functions as anything that resolves to a numpy array with a numeric dtype.
- One can now read from a memoryview.
- Fix error related to paletted BMP with the Pillow plugin.
- Improved logging.
- Fix installation issue on flavors of Ubuntu 14.04 /w Python 2.7 (#378).
- Use
np.frombuffer
instead ofnp.fromstring
in some cases.
- Renamed
Image
class toArray
and add documentation for this ndarray subclass. - Reading from HTTP and zipfiles has been improved and better documented.
- Improvements to reading and writing of Tiff metadata (by Lukas Schrangl).
- Better dealing of tifffile dependencies on Python 2.7 (#330 and #337 by Chris Barnes).
- Reader for the SPE format (#358 by lschr).
- Better termination of FFMPEG when reading from webcam (#346 by Dennis Vang).
- FFMPEG support for reading 16bit videos (#342 by Peter Minin).
- Console entry points for binary downloads (by Paul Mueller).
- Dropped support for Python 2.6, 3.2 and 3.3.
- Reading images from a url can now also have "suffixes" like "?query=foo".
- The
mimwrite()
andmvolwrite()
functions also work with generators. - Fix rounding of float data.
- New Lytro plugin (by Maximilian Schambach).
- New plugin based on BSDF format (for images/volumes and series thereof, including support for random access and streaming).
- TIFFFILE update to latest
tifffile.py
implementation. - DICOM fix that could fail in the presence of a directory.
- PILLOW improvements to API to provide same functionality as Scipy's
imread()
. - PILLOW fix for Gamma correction (#302).
- PILLOW now allows JPEG images to be read from a url.
- PILLOW fix determining of grayscale in 1 bit paletted images.
- FFMPEG improved device name parsing (by Dennis van Gerwen).
- FFMPEG now allows more control of position of extra parameters.
- FFMPEG improved parsing of fps from ffmpeg info.
- FFMPEG reader allows has
fps
argument to force reading at a specific FPS.
- New format for grabbing screenshots (for Windows and OS X).
- New format for grabbing image data from clipboard (Window only).
- Multipage Tiff files can now be read using
volread()
to obtain the image data as one array. - Updated the ffmpeg executables that imageio provides.
- The ffmpeg format can now also use the ffmpeg exe provided by the ffmpeg
conda package (
conda install ffmpeg -c conda-forge
). - Fixes to ffmpeg format in general.
- Improve docs and rounding in animated GIF duration.
- Fix for setting number of loops in animated GIF.
- Fixes for transparent images in Pillow.
- Fixes for float indexing that is disallowed in new Numpy (Freeimage plugin).
- Fix for using missing
close()
on Pillow images. - Updated version of tiffile plugin.
A bugfix release:
- Fix animated gif writer that was broken in newer Pillow version.
- FFMPEG plugin improvements: more reliable fps detection, can deal with missing FPS, more reliable subprocess termination,
- Mimread allows a few missing frames to better deal with certain video files.
- Allow question marks in url's.
- Allow Pillow plugin to read remote files by "enabling"
seek()
andtell()
. - Use invoke to run development tasks instead of custom "make" module.
Minor improvements related to Debian packaging.
- Standard images now have to be specified using e.g.
imageio.imread('imageio:chelsea.png')
to be more explicit about being a special case and potentially involving a download. - Improvements and fixes for the ffmpeg plugin (including improved seeking).
- Several tweaks to the tests and setup script to make it pass the Debian build system.
This release introduces a new plugin based on Pillow, which will take care of the "common formats" like PNG and JPEG, which was previously the role of the FreeImage plugin. The latter is still available but the FreeImage library is no longer distributed by default.
- New Pillow plugin to privide the common formats.
- FreeImage plugin gets lower priority w.r.t. resolving a format.
- No more automatic downloading of libraries and executable (for FreeImage, FFMPEG and AVBIN plugins).
- Pillow plugin comes with a format to read/write animated GIF to supersede the one provided by FreeImage.
- Various improvements/fixes to the ffmpeg plugin.
- Fixes and improvements of the DICOM plugin.
- Better support of exr images via FreeImage (by Joel Nises).
- New FEI format (for images produced by the FEI SEM microscope).
- Got rid of Lena image because it can be regarded offensive and is not (explicitly) publicly licensed.
- Fix issue with ffmpeg reader being slow on particular systems (#152).
- Tiff plugin updated.
- Add Tiff resolution support (Antony Lee).
- Support for 16bit PNG's (#150, by OrganicIrradiation).
- Fixes to ffmpeg plugin (#149, #145, #129).
- Fix in using IMAGEIO_FREEIMAGE_LIB (#141, by Radomirs Cirskis)
- Better ffmpeg verbosity and exe detection ( #138, #139, by Tim D. Smith).
- Freeimage conda package (in main channel) is updated and works on all major OS's.
- Conda install imageio!
- Fix bug where the ffmpeg plugin fails on certain video files (#131).
- Fix how dicom uses dcmtk for JPEG compressed files.
- Various improvements to the ffmpeg plugin.
- New tiffile plugin that should support most scientific formats.
- New simpleITK wrapper plugin.
- New gdal plugin.
- Freeimage plugin can load freeimage lib provided by conda.
- Dicom plugin improved handling of compressed files.
- Most plugins adopt lazy loading to keep imageio lean, fast, and scalable.
- We now build wheels for Pypi.
- Travis also tests Python 3.5.
This release features several fixes and small improvements, especially to the ffmpeg plugin.
- Fix 'FrameTime' in first frame of GIF image (#90)
- Fix that writing video could freeze on Windows (#84)
- Fix that ffmpeg process was sometimes not closed correctly (#79)
- Also protect user from clogging the machine for mvolread (#89)
- Better support for platforms other than Win/Linux/OSX (#87 )
- Support for reading from webcam on OSX (#83, #85)
- Support for dpx via the ffmpeg plugin (#81)
- Support for wmv via the ffmpeg plugin (#83)
- The ffmpeg plugin allows specifying pixelformat. The new default is more widely supported (#83)
- Allow passing additional arguments to ffmpeg command (#83)
- Quality of ffmpeg output now set via quality param instead of bitrate (#83)
- Imageio now has a few (documented) environment variables to specify the locations of plugin libraries/exes (thus preventing them from being automatically downloaded.
Basically a hotfix release. But some new features were introduced.
- Fixed that pip-installing would put README.md and other files in sys.prefix.
- The used ffmpeg exe can be overridden with an environment variable 'IMAGEIO_FFMPEG_EXE'.
- Relative paths work again.
- FFMPEG plugin moved to correct timeframe when seeking (thanks Zulko)
Imageio is now a dependency of Moviepy <https://github.com/Zulko/moviepy/>
_,
which exposed a few issues to fix. Imageio is now also available as a
Debian package (thanks Ghislain!). Furher, we tweaked our function names
to be cleared and more consistent (the old names still work).
- All
Xsave()
functions are renamed toXwrite()
. Alsoread()
andsave()
are nowget_reader()
andget_writer()
. The old names are available as aliases (and will be for the foreseable future) for backward compatibility. - Protect user from bringing computer in swap-mode by doing e.g.
mimread('hunger games.avi')
. - Continuous integration for Windows via Appveyor.
- All imports are relative, so imageio can be used as a subpackage in a larger project.
- FFMPEG is the default plugin for reading video (since AVBIN has issues).
- Better handling on NaN and Inf when converting to uint8.
- Provide dist packages that include freeimage lib and a few example images.
- Several changes to ease building into Debian package.
- Fixed segfault when saving gif (thanks levskaya, imageio#53).
- Don't fail when userdir is not writable.
- Gif plugin writer has fps param for consistency with avi/mp4 etc.
In this release we did a lot of work to push imageio to a new level. The code is now properly tested, and we have several more formats.
The big changes:
- Many unit tests were written to cover over 95% of the code base. (the core of imageio has 100% coverage).
- Setup continuous integration (CI) using Travis.
- Imageio now follows PEP8 style guides (and this is tested with CI).
- Refactoring of the code base. Resulting in a cleaner namespace.
- Many improvements to the documementation.
Plugins:
- The FFMPEG format is now well supported. Binaries are provided.
- New AVBIN format for more efficient reading of video files.
- New NPZ format that can store (a series of) arbitrarily shaped numpy arrays.
- New SWF format (shockwave flash) for lossless animated images.
- Improvements to the GIF format. The GIF and ANIGIF formats are now merged.
Further:
- New simple website to act as a front page (http://imageio.github.io).
- Compatibility with Pypy.
- We provide a range of :doc:
standard images <standardimages>
that are automatically downloaded. - Binaries (libs and executables) that plugins of imageio uses are now downloaded at runtime, not at build/install time. This simplifies things a lot.
- freeimage plugin now fully functional on pypy
- Added utilities for developers (run
python make
from the repo root). - PNG, JPEG, BMP,GIF and other plugins can now handle float data (pixel values are assumed to be between 0 and 1.
- Imageio now expand the user dir when filename start with '~/'.
- Many improvements and fixes overall.
- DICOM reader closes file after reading pixel data (avoid too-many-open-files error)
- Support for video data (import and export) via ffmpeg
- Read images from usb camera via ffmpeg (experimental)
- We moved to github!
- Raise error if URI could not be understood.
- Small improvement for better error reporting.
- FIxes in mvolread and DICOM plugin
Some more thorough testing resulted in several fixes and improvements over the last release.
- Fixes to reading of meta data in freeimage plugin which could cause errors when reading a file.
- Support for reading 4 bpp images.
- The color table for index images is now applied to yield an RGBA image.
- Basic support for Pypy.
- Better repr for the Image class.
- Fix in dicom reader (RescaleSlope and RescaleIntercept were not found)
- Fixed that progress indicator made things slow
- Fix installation/distribution issue.
This was a long haul. Implemented several plugins for animation and volumetric data to give an idea of what sort of API's work and which do not.
- Refactored for more conventional package layout (but importing without installing still supported)
- Put Reader and Writer classes in the namespace of the format. This makes a format a unified whole, and gets rid of the _get_reader_class and _get_write_class methods (at the cost of some extra indentation).
- Refactored Reader and Writer classes to come up with a better API for both users as plugins.
- The Request class acts as a smart bridging object. Therefore all plugins can now read from a zipfile, http/ftp, and bytes. And they don't have to do a thing.
- Implemented specific BMP, JPEG, PNG, GIF, ICON formats.
- Implemented animated gif plugin (based on freeimage).
- Implemented standalone DICOM plugin.
- Fixed issue 2 (fail at instal, introduced when implementing freezing)
- Improved documentation.
- Worked on distribution.
- Freezing should work now.
- Introduction of the imageio.help function.
- Wrote a lot of documentation.
- Added example (dummy) plugin.
- New plugin system implemented after discussions in group.
- Access to format information.
- First version with a preliminary plugin system.