{"id":19671228,"url":"https://github.com/cgohlke/imagecodecs","last_synced_at":"2026-01-16T09:48:35.536Z","repository":{"id":37857539,"uuid":"242423906","full_name":"cgohlke/imagecodecs","owner":"cgohlke","description":"Image transformation, compression, and decompression codecs.","archived":false,"fork":false,"pushed_at":"2026-01-14T04:26:15.000Z","size":24597,"stargazers_count":169,"open_issues_count":2,"forks_count":28,"subscribers_count":2,"default_branch":"master","last_synced_at":"2026-01-14T08:29:38.473Z","etag":null,"topics":["avif","image","jpeg","jpeg-ls","jpeg-xl","jpeg-xr","jpeg-xs","jpeg2000","lerc","lz4","lzf","lzma","lzw","packbits","python","tiff","ultrahdr","webp","zarr","zfp"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/imagecodecs","language":"Cython","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cgohlke.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGES.rst","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-02-22T23:00:03.000Z","updated_at":"2026-01-14T04:26:19.000Z","dependencies_parsed_at":"2024-01-15T00:12:08.370Z","dependency_job_id":"d21e4101-9179-4745-8293-17a3606b581b","html_url":"https://github.com/cgohlke/imagecodecs","commit_stats":{"total_commits":2148,"total_committers":1,"mean_commits":2148.0,"dds":0.0,"last_synced_commit":"50bac419858de471b934943f949835aad18b5a96"},"previous_names":[],"tags_count":66,"template":false,"template_full_name":null,"purl":"pkg:github/cgohlke/imagecodecs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cgohlke%2Fimagecodecs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cgohlke%2Fimagecodecs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cgohlke%2Fimagecodecs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cgohlke%2Fimagecodecs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cgohlke","download_url":"https://codeload.github.com/cgohlke/imagecodecs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cgohlke%2Fimagecodecs/sbom","scorecard":{"id":272516,"data":{"date":"2025-08-11","repo":{"name":"github.com/cgohlke/imagecodecs","commit":"e64d6c16eb49b006dc6116cac12997031efcf151"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.8,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: BSD 3-Clause \"New\" or \"Revised\" License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v2025.8.2 not signed: https://api.github.com/repos/cgohlke/imagecodecs/releases/237113369","Warn: release artifact v2025.3.30 not signed: https://api.github.com/repos/cgohlke/imagecodecs/releases/209190661","Warn: release artifact v2024.12.30 not signed: https://api.github.com/repos/cgohlke/imagecodecs/releases/192635854","Warn: release artifact v2024.9.22 not signed: https://api.github.com/repos/cgohlke/imagecodecs/releases/176246206","Warn: release artifact v2024.6.1 not signed: https://api.github.com/repos/cgohlke/imagecodecs/releases/158485722","Warn: release artifact v2025.8.2 does not have provenance: https://api.github.com/repos/cgohlke/imagecodecs/releases/237113369","Warn: release artifact v2025.3.30 does not have provenance: https://api.github.com/repos/cgohlke/imagecodecs/releases/209190661","Warn: release artifact v2024.12.30 does not have provenance: https://api.github.com/repos/cgohlke/imagecodecs/releases/192635854","Warn: release artifact v2024.9.22 does not have provenance: https://api.github.com/repos/cgohlke/imagecodecs/releases/176246206","Warn: release artifact v2024.6.1 does not have provenance: https://api.github.com/repos/cgohlke/imagecodecs/releases/158485722"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-17T13:44:08.784Z","repository_id":37857539,"created_at":"2025-08-17T13:44:08.784Z","updated_at":"2025-08-17T13:44:08.784Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28478049,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T06:30:42.265Z","status":"ssl_error","status_checked_at":"2026-01-16T06:30:16.248Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["avif","image","jpeg","jpeg-ls","jpeg-xl","jpeg-xr","jpeg-xs","jpeg2000","lerc","lz4","lzf","lzma","lzw","packbits","python","tiff","ultrahdr","webp","zarr","zfp"],"created_at":"2024-11-11T17:08:12.057Z","updated_at":"2026-01-16T09:48:35.523Z","avatar_url":"https://github.com/cgohlke.png","language":"Cython","funding_links":[],"categories":[],"sub_categories":[],"readme":"..\n  This file is generated by setup.py\n\nImage transformation, compression, and decompression codecs\n===========================================================\n\nImagecodecs is a Python library that provides block-oriented, in-memory buffer\ntransformation, compression, and decompression functions for use in tifffile,\nliffile, czifile, zarr, and other scientific image input/output packages.\n\nDecode and/or encode functions are implemented for\nZlib (DEFLATE), GZIP, LZMA, ZStandard (ZSTD), Blosc, Brotli, Snappy,\nBZ2, LZ4, LZ4F, LZ4HC, LZ4H5, LZW, LZO, LZF, LZFSE, LZHAM,\nPGLZ (PostgreSQL LZ), RCOMP (Rice), ZFP, SZ3, Meshopt, Pcodec, SPERR,\nAEC, SZIP, LERC, EER, NPY, BCn, DDS, BMP, PNG, APNG, GIF, TIFF, WebP,\nJPEG (2 to 16-bit), Lossless JPEG (LJPEG, LJ92, JPEGLL), JPEG 2000 (JP2, J2K),\nHigh-throughput JPEG 2000 (HTJ2K, JPH), JPEG LS, JPEG XL, JPEG XS,\nJPEG XR (WDP, HD Photo), Ultra HDR (JPEG_R), MOZJPEG, AVIF, HEIF, QOI,\nRGBE (HDR), Jetraw, DICOM RLE, PackBits, Packed Integers, Delta, XOR Delta,\nFloating Point Predictor, Bitorder reversal, Byteshuffle, Bitshuffle,\nFloat24 (24-bit floating point), Bfloat16 (brain floating point),\nQuantize (Scale, BitGroom, BitRound, GranularBR), and\nCMS (color space transformations).\nChecksum functions are implemented for CRC-32, Adler-32, Fletcher-32, and\nJenkins lookup3.\n\n:Author: `Christoph Gohlke \u003chttps://www.cgohlke.com\u003e`_\n:License: BSD-3-Clause\n:Version: 2026.1.14\n:DOI: `10.5281/zenodo.6915978 \u003chttps://doi.org/10.5281/zenodo.6915978\u003e`_\n\nQuickstart\n----------\n\nInstall the imagecodecs package and all dependencies from the\n`Python Package Index \u003chttps://pypi.org/project/imagecodecs/\u003e`_::\n\n    python -m pip install -U \"imagecodecs[all]\"\n\nImagecodecs is also available in other package repositories such as\n`Anaconda \u003chttps://anaconda.org/conda-forge/imagecodecs\u003e`_,\n`MSYS2 \u003chttps://packages.msys2.org/base/mingw-w64-python-imagecodecs\u003e`_, and\n`MacPorts \u003chttps://ports.macports.org/port/py-imagecodecs/summary\u003e`_.\n\nSee `Requirements`_ and `Notes`_ for building from source.\n\nSee `Examples`_ for using the programming interface.\n\nSource code and support are available on\n`GitHub \u003chttps://github.com/cgohlke/imagecodecs\u003e`_.\n\nRequirements\n------------\n\nThis revision was tested with the following requirements and dependencies\n(other versions may work):\n\n- `CPython \u003chttps://www.python.org\u003e`_ 3.11.9, 3.12.10, 3.13.11, 3.14.2 64-bit\n- `numpy \u003chttps://pypi.org/project/numpy\u003e`_ 2.4.1\n- `numcodecs \u003chttps://pypi.org/project/numcodecs/\u003e`_ 0.16.5\n  (optional, for Zarr file format 2 compatible codecs)\n\nBuild requirements:\n\n- `cython \u003chttps://github.com/cython/cython\u003e`_ 3.2.4\n- `brotli \u003chttps://github.com/google/brotli\u003e`_ 1.2.0\n- `bzip2 \u003chttps://gitlab.com/bzip2/bzip2\u003e`_ 1.0.8\n- `c-blosc \u003chttps://github.com/Blosc/c-blosc\u003e`_ 1.21.6\n- `c-blosc2 \u003chttps://github.com/Blosc/c-blosc2\u003e`_ 2.22.0\n- `charls \u003chttps://github.com/team-charls/charls\u003e`_ 2.4.2\n- `giflib \u003chttps://sourceforge.net/projects/giflib/\u003e`_ 5.2.2\n- `jxrlib \u003chttps://github.com/cgohlke/jxrlib\u003e`_ 1.2\n- `lcms2 \u003chttps://github.com/mm2/Little-CMS\u003e`_ 2.18\n- `lerc \u003chttps://github.com/Esri/lerc\u003e`_ 4.0.4\n- `libaec \u003chttps://gitlab.dkrz.de/k202009/libaec\u003e`_ 1.1.4\n- `libavif \u003chttps://github.com/AOMediaCodec/libavif\u003e`_ 1.3.0\n  (`aom \u003chttps://aomedia.googlesource.com/aom\u003e`_ 3.13.1,\n  `dav1d \u003chttps://github.com/videolan/dav1d\u003e`_ 1.5.3,\n  `rav1e \u003chttps://github.com/xiph/rav1e\u003e`_ 0.8.1,\n  `svt-av1 \u003chttps://gitlab.com/AOMediaCodec/SVT-AV1\u003e`_ 3.1.2,\n  `libyuv \u003chttps://chromium.googlesource.com/libyuv/libyuv\u003e`_ main,\n  `libxml2 \u003chttps://gitlab.gnome.org/GNOME/libxml2\u003e`_ 2.15.1)\n- `libdeflate \u003chttps://github.com/ebiggers/libdeflate\u003e`_ 1.25\n- `libheif \u003chttps://github.com/strukturag/libheif\u003e`_ 1.21.1\n  (`libde265 \u003chttps://github.com/strukturag/libde265\u003e`_ 1.0.16,\n  `x265 \u003chttps://bitbucket.org/multicoreware/x265_git/src/master/\u003e`_ 4.1)\n- `libjpeg-turbo \u003chttps://github.com/libjpeg-turbo/libjpeg-turbo\u003e`_ 3.1.3\n- `libjxl \u003chttps://github.com/libjxl/libjxl\u003e`_ 0.11.1\n- `libjxs \u003chttps://jpeg.org/jpegxs/software.html\u003e`_ 2.0.2\n- `liblzma \u003chttps://github.com/tukaani-project/xz\u003e`_ 5.8.2\n- `libpng \u003chttps://github.com/glennrp/libpng\u003e`_ 1.6.53\n- `libpng-apng \u003chttps://sourceforge.net/projects/libpng-apng/\u003e`_ 1.6.53\n- `libtiff \u003chttps://gitlab.com/libtiff/libtiff\u003e`_ 4.7.1\n- `libultrahdr \u003chttps://github.com/google/libultrahdr\u003e`_ 1.4.0\n- `libwebp \u003chttps://github.com/webmproject/libwebp\u003e`_ 1.6.0\n- `lz4 \u003chttps://github.com/lz4/lz4\u003e`_ 1.10.0\n- `meshoptimizer \u003chttps://github.com/zeux/meshoptimizer\u003e`_ 1.0\n- `openjpeg \u003chttps://github.com/uclouvain/openjpeg\u003e`_ 2.5.4\n- `openjph \u003chttps://github.com/aous72/OpenJPH\u003e`_ 0.26.0\n- `pcodec \u003chttps://github.com/mwlon/pcodec\u003e`_ 0.4.9 (unstable)\n- `snappy \u003chttps://github.com/google/snappy\u003e`_ 1.2.2\n- `sperr \u003chttps://github.com/NCAR/SPERR\u003e`_ 0.8.4\n- `sz3 \u003chttps://github.com/szcompressor/SZ3\u003e`_ 3.3.2\n- `zfp \u003chttps://github.com/LLNL/zfp\u003e`_ 1.0.1\n- `zlib \u003chttps://github.com/madler/zlib\u003e`_ 1.3.1.2\n- `zlib-ng \u003chttps://github.com/zlib-ng/zlib-ng\u003e`_ 2.3.2\n- `zstd \u003chttps://github.com/facebook/zstd\u003e`_ 1.5.7\n\nUnmaintained or discontinued build requirements:\n\n- `brunsli \u003chttps://github.com/google/brunsli\u003e`_ 0.1\n- `jetraw \u003chttps://github.com/Jetraw\u003e`_ 23.03.16.4\n- `lzfse \u003chttps://github.com/lzfse/lzfse/\u003e`_ 1.0\n- `lzham_codec \u003chttps://github.com/richgel999/lzham_codec/\u003e`_ 1.0\n- `lzokay \u003chttps://github.com/AxioDL/lzokay\u003e`_ db2df1f\n- `mozjpeg \u003chttps://github.com/mozilla/mozjpeg\u003e`_ 4.1.5\n- `zopfli \u003chttps://github.com/google/zopfli\u003e`_ 1.0.3\n\nVendored requirements:\n\n- `bcdec.h \u003chttps://github.com/iOrange/bcdec\u003e`_ 93628fe\n- `bitshuffle \u003chttps://github.com/kiyo-masui/bitshuffle\u003e`_ 0.5.2\n- `cfitsio ricecomp.c \u003chttps://heasarc.gsfc.nasa.gov/fitsio/\u003e`_ modified\n- `h5checksum.c \u003chttps://github.com/HDFGroup/hdf5/\u003e`_ modified\n- `jpg_0XC3.cpp\n  \u003chttps://github.com/rordenlab/dcm2niix/blob/master/console/jpg_0XC3.cpp\u003e`_\n  modified\n- `liblj92\n  \u003chttps://bitbucket.org/baldand/mlrawviewer/src/master/liblj92/\u003e`_ modified\n- `liblzf \u003chttp://oldhome.schmorp.de/marc/liblzf.html\u003e`_ 3.6\n- `libspng \u003chttps://github.com/randy408/libspng\u003e`_ 0.7.4\n- `nc4var.c \u003chttps://github.com/Unidata/netcdf-c/blob/main/libsrc4/nc4var.c\u003e`_\n  modified\n- `pg_lzcompress.c \u003chttps://github.com/postgres/postgres\u003e`_ modified\n- `qoi.h \u003chttps://github.com/phoboslab/qoi/\u003e`_ 4461cc3\n- `rgbe.c \u003chttps://www.graphics.cornell.edu/~bjw/rgbe/rgbe.c\u003e`_ modified\n\nTest requirements:\n\n- `tifffile \u003chttps://github.com/cgohlke/tifffile\u003e`_ 2025.12.20\n- `czifile \u003chttps://github.com/cgohlke/czifile\u003e`_ 2019.7.2.1\n- `liffile \u003chttps://github.com/cgohlke/liffile\u003e`_ 2025.12.12\n- `zarr \u003chttps://github.com/zarr-developers/zarr-python\u003e`_ 3.1.5\n- `python-blosc \u003chttps://github.com/Blosc/python-blosc\u003e`_ 1.11.3\n- `python-blosc2 \u003chttps://github.com/Blosc/python-blosc2\u003e`_ 3.11.2\n- `python-brotli \u003chttps://github.com/google/brotli/tree/master/python\u003e`_ 1.2.0\n- `python-lz4 \u003chttps://github.com/python-lz4/python-lz4\u003e`_ 4.4.5\n- `python-lzf \u003chttps://github.com/teepark/python-lzf\u003e`_ 0.2.6\n- `python-snappy \u003chttps://github.com/andrix/python-snappy\u003e`_ 0.7.3\n- `pyliblzfse \u003chttps://github.com/ydkhatri/pyliblzfse\u003e`_ 0.4.1\n- `backports.zstd \u003chttps://github.com/rogdham/backports.zstd\u003e`_ 1.3.0\n- `zopflipy \u003chttps://github.com/hattya/zopflipy\u003e`_ 1.12\n\nRevisions\n---------\n\n2026.1.14\n\n- Pass 8281 tests.\n- Add tiff_encode function.\n- Add extra options for HTJ2K (#134).\n- Add linear RGB option to cms_profile.\n- Change ZSTD default compression level to 3.\n\n2026.1.1\n\n- Enforce positional-only and keyword-only parameters (breaking).\n- Base numcodecs.Jpeg on JPEG8 codec (breaking).\n- Add HTJ2K codec based on OpenJPH library (#125).\n- Add MESHOPT codec based on meshoptimizer library.\n- Fix decoding concatenated ZStandard frames.\n- Fix potential issues in TIFF and WEBP codecs.\n- Fix pyi stub file.\n- Change default Brotli compression level to 4.\n- Use Brotli streaming API for decoding.\n- Enable decoding UltraHDR to uint16.\n- Tweak memory allocation and reallocation strategies.\n- Use fused types.\n- Improve code quality.\n\n2025.11.11\n\n- Fix EER superresolution decoding (breaking; see tifffile #313).\n- Add option to eer_decode to add to uint16 array.\n- Add option to specify CICP/NCLX parameters in avif_encode (#131).\n- Add BFLOAT16 codec.\n- Build ABI3 wheels.\n- Require Cython \u003e= 3.2.\n- Deprecate Python 3.11.\n\n2025.8.2\n\n- Fix szip_encode default output buffer might be too small (#128).\n- Fix minor bugs in LZ4H5 codec (#127).\n- Avoid grayscale-to-RGB conversions in AVIF codecs.\n- Improve AVIF error messages.\n- Add flag for free-threading compatibility (#113).\n- Do not use zlib uncompress2, which is not available on manylinux.\n- Do not build unstable BRUNSLI, PCODEC, SPERR, and SZ3 codecs.\n- Require libavif \u003e= 1.3 and Cython \u003e= 3.1.\n- Support Python 3.14 and 3.14t.\n- Drop support for Python 3.10 and PyPy.\n\n2025.3.30\n\n- Fix some codecs for use with Zarr 3, zarr_format=2 (#123).\n- Fix LZ4H5 codec when block size is less than compressed size (#126).\n- Fix pglz_compress is not thread-safe.\n- Set __module__ attribute on public objects.\n- Drop support for Python 3.9, deprecate Python 3.10.\n\n2024.12.30\n\n- …\n\nRefer to the CHANGES file for older revisions.\n\nObjectives\n----------\n\nMany scientific image storage formats, such as TIFF, CZI, XLIF, DICOM, HDF,\nand Zarr are containers that store numerous small data segments (chunks,\ntiles, stripes). These segments are encoded using various compression and\npre-filtering methods. Metadata common to all data segments are typically\nstored separately from the segments.\n\nThe purpose of the Imagecodecs library is to support Python modules in\nencoding and decoding such data segments. The specific aims are:\n\n- Provide functions for encoding and decoding small image data segments\n  in-memory (as opposed to in-file) from and to bytes or numpy arrays for\n  many compression and filtering methods.\n- Support image formats and compression methods that are not available\n  elsewhere in the Python ecosystem.\n- Reduce the runtime dependency on numerous, large, inapt, or unmaintained\n  Python packages. The Imagecodecs package only depends on numpy.\n- Implement codecs as Cython wrappers of third-party libraries with a C API\n  and permissive license if available; otherwise use own C library.\n  Provide Cython definition files for the wrapped C libraries.\n- Release the Python global interpreter lock (GIL) during extended native/C\n  function calls for multi-threaded use.\n\nAccessing parts of large data segments and reading metadata from segments\nare outside the scope of this library.\n\nNotes\n-----\n\nThis library is largely a work in progress.\n\nThe API is not stable yet and might change between revisions.\n\nPython \u003c= 3.10 is no longer supported. 32-bit versions are deprecated.\n\nWorks on little-endian platforms only.\n\nSupported platforms are ``win_amd64``, ``win_arm64``, ``win32``,\n``macosx_x86_64``, ``macosx_arm64``, ``manylinux_x86_64``, and\n``manylinux_aarch64``.\n\nWheels may not be available for all platforms and all releases.\n\nNot all features are available on all platforms.\n\nThe ``bcn``, ``dds``, ``dicomrle``, ``eer``, ``lzo``, ``packints``,\nand ``jpegsof3`` codecs are currently decode-only.\n\nThe ``brunsli`` and ``pcodec`` codecs are distributed as source code only\nbecause the underlying libraries are unstable.\n\nThe ``heif``, ``jetraw``, and ``jpegxs`` codecs are distributed as source\ncode only due to license and possible patent usage issues.\n\nThe latest `Microsoft Visual C++ Redistributable for Visual Studio 2017-2026\n\u003chttps://docs.microsoft.com/en-US/cpp/windows/latest-supported-vc-redist\u003e`_\nis required on Windows.\n\nRefer to the imagecodecs/licenses folder for 3rd-party library licenses.\n\nThis software is based in part on the work of the Independent JPEG Group.\n\nUpdate pip and setuptools to the latest version before installing imagecodecs::\n\n    python -m pip install -U pip setuptools wheel Cython.\n\nWhen building against libjpeg or libjpeg_turbo \u003c 3, set the environment\nvariable ``IMAGECODECS_JPEG8_LEGACY=1`` to enable legacy API support.\n\nBefore building imagecodecs from source code, install required tools and\nlibraries. For example, on latest Ubuntu Linux distributions:\n\n    ``sudo apt-get install build-essential python3-dev cython3 python3-pip\n    python3-setuptools python3-wheel python3-numpy libdeflate-dev libjpeg-dev\n    libjxr-dev liblcms2-dev liblz4-dev liblerc-dev liblzma-dev libopenjp2-7-dev\n    libpng-dev libtiff-dev libwebp-dev libz-dev libzstd-dev``\n\nTo build and install imagecodecs from source code, run::\n\n    python -m pip install .\n\nMany extensions are disabled by default when building from source.\n\nTo define which extensions are built, or to modify build settings such as\nlibrary names and compiler arguments, provide a\n``imagecodecs_distributor_setup.customize_build`` function, which is\nimported and executed during setup.\nSee ``setup.py`` for pre-defined ``customize_build`` functions.\n\nOther projects providing imaging or compression codecs:\n`stdlib-zlib \u003chttps://docs.python.org/3/library/zlib.html\u003e`_,\n`stdlib-bz2 \u003chttps://docs.python.org/3/library/bz2.html\u003e`_,\n`stdlib-lzma \u003chttps://docs.python.org/3/library/lzma.html\u003e`_,\n`backports.lzma \u003chttps://github.com/peterjc/backports.lzma\u003e`_,\n`python-lzo \u003chttps://bitbucket.org/james_taylor/python-lzo-static\u003e`_,\n`python-lzw \u003chttps://github.com/joeatwork/python-lzw\u003e`_,\n`python-lerc \u003chttps://pypi.org/project/lerc/\u003e`_,\n`wavpack-numcodecs\n\u003chttps://github.com/AllenNeuralDynamics/wavpack-numcodecs\u003e`_,\n`packbits \u003chttps://github.com/psd-tools/packbits\u003e`_,\n`isa-l.igzip \u003chttps://github.com/intel/isa-l\u003e`_,\n`fpzip \u003chttps://github.com/seung-lab/fpzip\u003e`_,\n`libmng \u003chttps://sourceforge.net/projects/libmng/\u003e`_,\n`openexr \u003chttps://github.com/AcademySoftwareFoundation/openexr\u003e`_,\n`openzl \u003chttps://github.com/facebook/openzl\u003e`_,\n`openhtj2k \u003chttps://github.com/osamu620/OpenHTJ2K\u003e`_,\n`pyjetraw \u003chttps://github.com/Jetraw/pyJetraw\u003e`_,\n`tinyexr \u003chttps://github.com/syoyo/tinyexr\u003e`_,\n`pytinyexr \u003chttps://github.com/syoyo/pytinyexr\u003e`_,\n`pyroexr \u003chttps://github.com/dragly/pyroexr\u003e`_,\n`jasper \u003chttps://github.com/jasper-software/jasper\u003e`_,\n`libjpeg \u003chttps://github.com/thorfdbg/libjpeg\u003e`_ (gpl),\n`pylibjpeg \u003chttps://github.com/pydicom/pylibjpeg\u003e`_,\n`pylibjpeg-libjpeg \u003chttps://github.com/pydicom/pylibjpeg-libjpeg\u003e`_ (gpl),\n`pylibjpeg-openjpeg \u003chttps://github.com/pydicom/pylibjpeg-openjpeg\u003e`_,\n`pylibjpeg-rle \u003chttps://github.com/pydicom/pylibjpeg-rle\u003e`_,\n`glymur \u003chttps://github.com/quintusdias/glymur\u003e`_,\n`pyheif \u003chttps://github.com/carsales/pyheif\u003e`_,\n`pyrus-cramjam \u003chttps://github.com/milesgranger/pyrus-cramjam\u003e`_,\n`pylzham \u003chttps://github.com/Galaxy1036/pylzham\u003e`_,\n`brieflz \u003chttps://github.com/jibsen/brieflz\u003e`_,\n`quicklz \u003chttp://www.quicklz.com/\u003e`_ (gpl),\n`lzo \u003chttp://www.oberhumer.com/opensource/lzo/\u003e`_ (gpl),\n`nvjpeg \u003chttps://developer.nvidia.com/nvjpeg\u003e`_,\n`nvjpeg2k \u003chttps://developer.nvidia.com/nvjpeg\u003e`_,\n`pyturbojpeg \u003chttps://github.com/lilohuang/PyTurboJPEG\u003e`_,\n`ccsds123 \u003chttps://github.com/drowzie/CCSDS123-Issue-2\u003e`_,\n`lpc-rice \u003chttps://sourceforge.net/projects/lpcrice/\u003e`_,\n`compression-algorithms \u003chttps://github.com/glampert/compression-algorithms\u003e`_,\n`compressonator \u003chttps://github.com/GPUOpen-Tools/Compressonator\u003e`_,\n`wuffs \u003chttps://github.com/google/wuffs\u003e`_,\n`tinydng \u003chttps://github.com/syoyo/tinydng\u003e`_,\n`grok \u003chttps://github.com/GrokImageCompression/grok\u003e`_ (agpl),\n`mafisc\n\u003chttps://wr.informatik.uni-hamburg.de/research/projects/icomex/mafisc\u003e`_,\n`b3d \u003chttps://github.com/balintbalazs/B3D\u003e`_,\n`fo-dicom.codecs \u003chttps://github.com/Efferent-Health/fo-dicom.Codecs\u003e`_,\n`jpegli \u003chttps://github.com/google/jpegli\u003e`_,\n`hdf5plugin \u003chttps://github.com/silx-kit/hdf5plugin\u003e`_.\n\nExamples\n--------\nImport the JPEG2K codec:\n\n.. code-block:: python\n\n    \u003e\u003e\u003e from imagecodecs import (\n    ...     jpeg2k_encode,\n    ...     jpeg2k_decode,\n    ...     jpeg2k_check,\n    ...     jpeg2k_version,\n    ...     JPEG2K,\n    ... )\n\nCheck that the JPEG2K codec is available in the imagecodecs build:\n\n.. code-block:: python\n\n    \u003e\u003e\u003e JPEG2K.available\n    True\n\nPrint the version of the JPEG2K codec's underlying OpenJPEG library:\n\n.. code-block:: python\n\n    \u003e\u003e\u003e jpeg2k_version()\n    'openjpeg 2.5.4'\n\nEncode a numpy array in lossless JP2 format:\n\n.. code-block:: python\n\n    \u003e\u003e\u003e import numpy\n    \u003e\u003e\u003e array = numpy.random.randint(100, 200, (256, 256, 3), numpy.uint8)\n    \u003e\u003e\u003e encoded = jpeg2k_encode(array, level=0)\n    \u003e\u003e\u003e bytes(encoded[:12])\n    b'\\x00\\x00\\x00\\x0cjP  \\r\\n\\x87\\n'\n\nCheck that the encoded bytes likely contain a JPEG 2000 stream:\n\n.. code-block:: python\n\n    \u003e\u003e\u003e jpeg2k_check(encoded)\n    True\n\nDecode the JP2 encoded bytes to a numpy array:\n\n.. code-block:: python\n\n    \u003e\u003e\u003e decoded = jpeg2k_decode(encoded)\n    \u003e\u003e\u003e numpy.array_equal(decoded, array)\n    True\n\nDecode the JP2 encoded bytes to an existing numpy array:\n\n.. code-block:: python\n\n    \u003e\u003e\u003e out = numpy.empty_like(array)\n    \u003e\u003e\u003e _ = jpeg2k_decode(encoded, out=out)\n    \u003e\u003e\u003e numpy.array_equal(out, array)\n    True\n\nNot all codecs are fully implemented, raising exceptions at runtime:\n\n.. code-block:: python\n\n    \u003e\u003e\u003e from imagecodecs import packints_encode\n    \u003e\u003e\u003e packints_encode(array, 8)\n    Traceback (most recent call last):\n     ...\n    NotImplementedError: packints_encode\n\nWrite the numpy array to a JP2 file:\n\n.. code-block:: python\n\n    \u003e\u003e\u003e from imagecodecs import imwrite, imread\n    \u003e\u003e\u003e imwrite('_test.jp2', array)\n\nRead the image from the JP2 file as numpy array:\n\n.. code-block:: python\n\n    \u003e\u003e\u003e image = imread('_test.jp2')\n    \u003e\u003e\u003e numpy.array_equal(image, array)\n    True\n\nCreate a JPEG 2000 compressed Zarr array:\n\n.. code-block:: python\n\n    \u003e\u003e\u003e import zarr\n    \u003e\u003e\u003e import numcodecs\n    \u003e\u003e\u003e from imagecodecs.numcodecs import Jpeg2k\n    \u003e\u003e\u003e numcodecs.register_codec(Jpeg2k)\n    \u003e\u003e\u003e zarr.zeros(\n    ...     (4, 5, 512, 512, 3),\n    ...     chunks=(1, 1, 256, 256, 3),\n    ...     dtype='u1',\n    ...     compressor=Jpeg2k(),\n    ...     zarr_format=2,\n    ... )\n    \u003c...Array ...(4, 5, 512, 512, 3) ...uint8\u003e\n\nAccess image data in a sequence of JP2 files via tifffile.FileSequence and\ndask.array:\n\n.. code-block:: python\n\n    \u003e\u003e\u003e import tifffile\n    \u003e\u003e\u003e import dask.array\n    \u003e\u003e\u003e def jp2_read(filename):\n    ...     with open(filename, 'rb') as fh:\n    ...         data = fh.read()\n    ...     return jpeg2k_decode(data)\n    ...\n    \u003e\u003e\u003e with tifffile.FileSequence(jp2_read, '*.jp2') as ims:\n    ...     with ims.aszarr() as store:\n    ...         dask.array.from_zarr(store)\n    ...\n    dask.array\u003cfrom-zarr, shape=(1, 256, 256, 3)...chunksize=(1, 256, 256, 3)...\n\nWrite the Zarr store to a fsspec ReferenceFileSystem in JSON format\nand open it as a Zarr array:\n\n.. code-block:: python\n\n    \u003e\u003e\u003e store.write_fsspec(\n    ...     'temp.json', url='file://', codec_id='imagecodecs_jpeg2k'\n    ... )\n    \u003e\u003e\u003e from kerchunk.utils import refs_as_store\n    \u003e\u003e\u003e zarr.open(refs_as_store('temp.json'), mode='r')\n    \u003cArray \u003cFsspecStore(ReferenceFileSystem, /)\u003e shape=(1, 256, 256, 3) dtype=uint8\u003e\n\nView the image in the JP2 file from the command line::\n\n    python -m imagecodecs _test.jp2","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcgohlke%2Fimagecodecs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcgohlke%2Fimagecodecs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcgohlke%2Fimagecodecs/lists"}