Skip to main content

No project description provided

Project description

imgsize

Given some data, determines whether the data is likely an image and if so, what size and type it is and whether it is animated or not.

Formats

Supported formats:

  • PNG/APNG
  • JPEG
  • GIF
  • AVIF/AVIS
  • BMP

Usage

from imgsize import get_size

some_image_data: bytes = ...

size = get_size(some_image_data)
if size is None:
    print("Could not handle data")
else:
    size.width
    size.height
    size.mime_type
    size.is_animated

You should not pass the entire image data, the first kilobyte or so should suffice.

API

imgsize.get_size(data: bytes) -> imgsize.Size | None

Given the data in the bytes provided, attempts to determine the image format, size and whether it is an animated image or not, otherwise returns None.

imgsize.Size

A class with four properties: width: int, height: int, mime_type: str, is_animated: bool.

Instances of imgsize.Size are equatable, hashable and iterable (yielding width and height).

Instances of imgsize.Size have a as_dict() method which returns the properties as a dictionary.

Notes

imgsize does not validate whether the data passed is a valid image or not. The intended use of this library is to reject data early and quickly if it does not appear to be an image format you intend to support. If you need to validate the entire image, the suggested workflow is to use this library to reject data that is not images, is not a file format you support, has dimensions beyond what you wish to support or is animated if you only want static images, then pass it to a library that does actual image parsing to determine if the data is actually an image.

imgsize only supports a few formats, the supported formats is mostly based on what browsers support, and does not necessarily support all features or variants of those formats, as a result, there might be false positives and false negatives.

Building

Use maturin to build: maturin build

To build & install into your local env: maturin develop

Testing

Rust

cargo test

Python

The following must be run in a virtual env:

pip install '.[test]'
pytest python-tests

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

imgsize-3.0.0.tar.gz (2.4 MB view hashes)

Uploaded Source

Built Distributions

imgsize-3.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (261.7 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

imgsize-3.0.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (300.7 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ s390x

imgsize-3.0.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (296.5 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ppc64le

imgsize-3.0.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (270.3 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

imgsize-3.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (270.6 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

imgsize-3.0.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl (273.7 kB view hashes)

Uploaded PyPy manylinux: glibc 2.5+ i686

imgsize-3.0.0-cp312-none-win_amd64.whl (129.7 kB view hashes)

Uploaded CPython 3.12 Windows x86-64

imgsize-3.0.0-cp312-none-win32.whl (124.4 kB view hashes)

Uploaded CPython 3.12 Windows x86

imgsize-3.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (260.0 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

imgsize-3.0.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl (299.9 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ s390x

imgsize-3.0.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (295.1 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ppc64le

imgsize-3.0.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (268.9 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARMv7l

imgsize-3.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (268.7 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

imgsize-3.0.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl (272.4 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.5+ i686

imgsize-3.0.0-cp312-cp312-macosx_11_0_arm64.whl (224.3 kB view hashes)

Uploaded CPython 3.12 macOS 11.0+ ARM64

imgsize-3.0.0-cp312-cp312-macosx_10_12_x86_64.whl (225.8 kB view hashes)

Uploaded CPython 3.12 macOS 10.12+ x86-64

imgsize-3.0.0-cp311-none-win_amd64.whl (131.2 kB view hashes)

Uploaded CPython 3.11 Windows x86-64

imgsize-3.0.0-cp311-none-win32.whl (125.4 kB view hashes)

Uploaded CPython 3.11 Windows x86

imgsize-3.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (260.2 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

imgsize-3.0.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl (298.1 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ s390x

imgsize-3.0.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (294.9 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ppc64le

imgsize-3.0.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (268.7 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARMv7l

imgsize-3.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (268.6 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

imgsize-3.0.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl (272.4 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.5+ i686

imgsize-3.0.0-cp311-cp311-macosx_11_0_arm64.whl (224.0 kB view hashes)

Uploaded CPython 3.11 macOS 11.0+ ARM64

imgsize-3.0.0-cp311-cp311-macosx_10_12_x86_64.whl (226.4 kB view hashes)

Uploaded CPython 3.11 macOS 10.12+ x86-64

imgsize-3.0.0-cp310-none-win_amd64.whl (131.2 kB view hashes)

Uploaded CPython 3.10 Windows x86-64

imgsize-3.0.0-cp310-none-win32.whl (125.3 kB view hashes)

Uploaded CPython 3.10 Windows x86

imgsize-3.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (260.4 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

imgsize-3.0.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl (298.9 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ s390x

imgsize-3.0.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (294.8 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ppc64le

imgsize-3.0.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (268.7 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARMv7l

imgsize-3.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (268.7 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

imgsize-3.0.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl (272.4 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.5+ i686

imgsize-3.0.0-cp310-cp310-macosx_11_0_arm64.whl (224.4 kB view hashes)

Uploaded CPython 3.10 macOS 11.0+ ARM64

imgsize-3.0.0-cp310-cp310-macosx_10_12_x86_64.whl (226.3 kB view hashes)

Uploaded CPython 3.10 macOS 10.12+ x86-64

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page