Skip to main content

Image IO APIs for wide range image formats (Camera manufacturer RAW images, jpg, png, tif, dng, bmp, yuv, nv12 ), support Exif, interact nicely with numpy array.

Project description

CXX Image IO

PyPI - Version Supported Python versions Supported OS Supported Archi License Wheel OS CI Weekly

Introduction

CXX Image IO is a Python project which provides the image IO interfaces, binding with the C++ library: https://github.com/emmcb/cxx-image. These IO interfaces are designed to read and write images in many file formats in generic way and to interact nicely with numpy array.

Image format Read Write EXIF Pixel precision Pixel type File extension Sidecar needed
BMP x x 8 bits Grayscale, RGB, RGBA .bmp
CFA x x 16 bits Bayer .cfa
DNG x x x 16 bits, float Bayer, RGB .dng
JPEG x x x 8 bits Grayscale, RGB .jpg, .jpeg
MIPI RAW x x 10 bits, 12 bits Bayer .RAWMIPI, .RAWMIPI10, .RAWMIPI12 x
PLAIN RAW x x * * .raw .plain16, .nv12, .yuv, * x
PNG x x 8 bits, 16 bits Grayscale, RGB, RGBA .png
TIFF x x x 8 bits, 16 bits, float Bayer, RGB .tif, .tiff

Since version v1.1.2, cxx-image-io supports reading Bayer RAW images from reflex cameras into numpy.array, while also parsing some EXIF information. It is integrated with the C++ library LibRaw https://www.libraw.org/.

The RAW image formats of the following camera manufacturers are supported, user can open these camera raw files by read_image, get image as numpy.array format:

Camera manufacturer Image format
Canon CR2
Nikon NEF
Sony ARW
Panasonic RW2
Kodak DCR
Samsung SRW
Olympus ORF
Leica RAW
Pentax PEF

Getting Started

Prerequisites

This projet currently supports Python from 3.10 to 3.14 on

  • Windows: x86_64
  • Linux: x86_64 and aarch64, glibc v2.28+, musl libc v1.2+
  • MacOS: x86_64 and arm64, v11.0+

Installation

The python package cxx-image-io is to be installed by pip

pip install cxx-image-io

Usage

Image reading basic example

read_image is able to read a image file and return a numpy array and ImageMetadata object.

from cxx_image_io import read_image
from cxx_image_io import ImageMetadata
import numpy as np
from pathlib import Path

image, metadata = read_image(Path('/path/to/image.jpg'))
assert isinstance(image, np.ndarray)

print('Type:', image.dtype)
print('Shape:', image.shape)

image is a numpy array which is suitable for the image processing afterwards.

The print result could be like this:

Type: uint8
Shape: (551, 603, 3)

ImageMetadata is the information about the image, the component fileInfo including the pixel type, pixel precision and image layout, which define fundamentally how the pixels arranged in buffer.

print(metadata.fileInfo)

The print result could be like this:

{'pixelPrecision': 8, 'imageLayout': 'interleaved', 'pixelType': 'rgb'}

metadata.fileInfo shows: image is a 3-dimensional numpy array, where rgb 3 channels interleaved, in each channel, pixel depth is 8 bits.

ImageMetadata has more components than fileInfo, it also includes ExifMetadata, help(ImageMetadata) will show the details.

Read Camera manufacturer RAW image example:

reading camera manufacturer raw image is the same method as we read from .jpg or .tif, just call read_image.

from cxx_image_io import read_image
from cxx_image_io import ImageMetadata
import numpy as np
from pathlib import Path

image, metadata = read_image(Path('test/images/RAW_CANON_EOS_1DX.CR2'))
assert isinstance(image, np.ndarray)

print('Type:', image.dtype)
print('Shape:', image.shape)

print(metadata)

The print result will be like:

Type: uint16
Shape: (3584, 5344)
{
   "fileInfo":{
      "width":5344,
      "height":3584,
      "pixelPrecision":14,
      "imageLayout":"planar",
      "pixelType":"bayer_rggb",
      "pixelRepresentation":"uint16"
   },
   "exifMetadata":{
      "imageWidth":5218,
      "imageHeight":3482,
      "make":"Canon",
      "model":"EOS-1D X",
      "orientation":1,
      "exposureTime":[
         1,
         80
      ],
      "fNumber":[
         56,
         10
      ],
      "isoSpeedRatings":1600,
      "dateTimeOriginal":"2012:09:06 07:48:25",
      "focalLength":[
         700,
         10
      ]
   },
   "shootingParams":{

   },
   "cameraControls":{
      "whiteBalance":[
         1.75390625,
         1.4775390625
      ]
   },
   "calibrationData":{
      "blackLevel":2048,
      "whiteLevel":15438,
      "colorMatrix":[
         [
            1.9404515027999878,
            -1.1166307926177979,
            0.17617927491664886
         ],
         [
            -0.21374493837356567,
            1.6440128087997437,
            -0.430267870426178
         ],
         [
            0.021280933171510696,
            -0.5217925906181335,
            1.500511646270752
         ]
      ]
   },
   "semanticMasks":[

   ],
   "LibRawParams":{
      "rawWidth":5344,
      "rawHeight":3584,
      "rawWidthVisible":5218,
      "rawHeightVisible":3482,
      "topMargin":100,
      "leftMargin":126
   }
}

Note that camera manufacturer RAW image metadata has an additional Parameters: LibRawParams, it contains the coordinates of the original RAW sizes, including the top and left margins, as well as the actual visible area's width and height in the original RAW.

According to these inforamtions, user can corp the visable zone on the RAW image numpy array.

Image reading with sidecar JSON

Some file formats need to know in advance some informations about the image. For example, the PLAIN RAW format is just a simple dump of a buffer into a file, thus it needs to know how to interpret the data.

Bayer Plain Raw 16 bits

image, metadata = read_image(Path('/path/to/image.plain16'))
print('Type:', image.dtype)
print('Shape:', image.shape)
print(metadata.fileInfo)

In this case, user need to have an image sidecar JSON located next to the image file as the same name and path '/path/to/image.json'

{
    "fileInfo": {
        "format": "plain",
        "height": 3072,
        "width": 4080
        "pixelPrecision": 16,
        "pixelType": "bayer_gbrg",
    }
}

After image reading, the information in JSON sidecar is parsed in ImageMetadata object.

The print result of will be like this:

Type: uint16
Shape: (3072, 4080)
{'width': 4080, 'height': 3072, 'pixelPrecision': 16, 'imageLayout': 'planar', 'pixelType': 'bayer_gbrg'}

metadata.fileInfo shows that image is a 2-dimensional numpy array, where pixel is Bayer type, planar layout (not interleaved), pixel depth is 16 bits.

metadata.fileInfo has more attributes to describe the file info, like widthAlignment, heightAlignment, please use help(metadata.fileInfo) to see the details.

Image sidecar is not mandatory, for the other formats which have already image information in their header, like jpg, png, tif, cfa. we don't need to provide image metadata.

Other image reading with sidecar examples

Click to unfold other image format sidecar examples

Packed RAW MIPI 12 bits:

python code

image, metadata = read_image(Path('/path/to/image.RAWMIPI12'))

sidecar json

{
    "fileInfo": {
        "fileFormat": "raw12",
        "height": 3000,
        "width": 4000,
        "pixelPrecision": 12,
        "pixelType": "bayer_gbrg"
    }
}

Packed RAW MIPI 10 bits:

python code

image, metadata = read_image(Path('/path/to/image.RAWMIPI'))

sidecar json

{
    "fileInfo": {
        "height": 3000,
        "width": 4000,
        "format": "raw10",
        "pixelPrecision": 10,
        "pixelType": "bayer_grbg"
    }
}

YUV 420 buffer 8 bits:

python code

image, metadata = read_image(Path('/path/to/image.yuv'))

sidecar json

{
    "fileInfo": {
        "format": "plain",
        "height": 300,
        "width": 400,
        "imageLayout": "yuv_420"
    }
}

NV12 buffer 8 bits:

python code

image, metadata = read_image(Path('/path/to/image.nv12'))

sidecar json

{
    "fileInfo": {
        "format": "plain",
        "height": 300,
        "width": 400,
        "imageLayout": "nv12"
    }
}

Split and merge image channels

After calling read_image, cxx-image-io provides a public API split_image_channels which helps to split to different colors channels, so that user can do the different processes on them. The function return type is a dictionary which contains the different color channel name as keys, and the value in numpy array of one single channel.

before calling write_image, cxx-image-io provides a public API merge_image_channels which helps to merge different colors channels to a numpy array buffer.

from cxx_image_io import read_image, split_image_channels, merge_image_channels, ImageLayout, ImageMetadata, PixelRepresentation, PixelType
import numpy as np
from pathlib import Path

rgb, metadata = read_image(Path('rgb_8bit.jpg'))

channels = split_image_channels(rgb, metadata)

# print(channels['r'])  # Red channel in numpy array
# print(channels['g'])  # Green channel in numpy array
# print(channels['b'])  # Blue channel in numpy array

rgb_post = merge_image_channels(channels, metadata)

np.array_equal(rgb, rgb_post)

cfa, metadata = read_image(Path('bayer_16bit.plain16'))

channels = split_image_channels(cfa, metadata)

# print(channels['gr'])  # Bayer Gr pixels in numpy array
# print(channels['r'])  # Bayer R pixels in numpy array
# print(channels['b'])  # Bayer B pixels in numpy array
# print(channels['gb'])  # Bayer Gb pixels in numpy array

cfa_post = merge_image_channels(channels, metadata)

np.array_equal(cfa, cfa_post)

yuv, metadata = read_image(Path('raw.nv12'))

channels = split_image_channels(yuv, metadata)

# print(channels['y'])  # Y plane in numpy array
# print(channels['u'])  # U plane in numpy array
# print(channels['v'])  # V plane in numpy array

yuv_post = merge_image_channels(channels, metadata)

np.array_equal(yuv, yuv_post)

Image writing

write_image is able to write a numpy array to image file.

To write the pure numpy array to different image file extensions. User need to define the following fundamental parameters in ImageMetadata which is part of ImageWriter.Options. In order to call the specific C++ image libraries with them.

from cxx_image_io import ImageMetadata, ImageWriter, FileFormat, PixelType, ImageLayout
from cxx_image_io import write_image
import numpy as np
from pathlib import Path

metadata = ImageMetadata()
metadata.fileInfo.pixelType = PixelType.RGB
metadata.fileInfo.imageLayout = ImageLayout.INTERLEAVED

write_options = ImageWriter.Options(metadata)

assert isinstance(image, np.ndarray)
write_image(Path('/path/to/image.jpg'), image, write_options)

write_image can determine the image format by file extensions, but some formats don't not rely on a specific extension, for example the PLAIN format that allows to directly dump the image buffer to a file. In this case, the format can be specified through ImageWriter.Options.

metadata = ImageMetadata()
metadata.fileInfo.pixelType = PixelType.BAYER_GBRG
metadata.fileInfo.imageLayout = ImageLayout.PLANAR

write_options = ImageWriter.Options(metadata)
write_options.fileFormat = FileFormat.PLAIN

assert isinstance(image, np.ndarray)
write_image(Path('/path/to/image.plain16'), image, write_options)

Other image writing examples

Click to unfold other image writing examples

Packed RAW MIPI 12 bits:

metadata = ImageMetadata()

metadata.fileInfo.pixelType = PixelType.BAYER_GBRG  # adapt with User's RAW Bayer pattern.
metadata.fileInfo.imageLayout = ImageLayout.PLANAR
metadata.fileInfo.pixelPrecision = 12

write_options = ImageWriter.Options(metadata)

assert isinstance(image, np.ndarray)
write_image(Path('/path/to/image.RAWMIPI12'), image, write_options)

Packed RAW MIPI 10 bits:

metadata = ImageMetadata()

metadata.fileInfo.pixelType = PixelType.BAYER_GBRG # to adapt with User's RAW Bayer pattern.
metadata.fileInfo.imageLayout = ImageLayout.PLANAR
metadata.fileInfo.pixelPrecision = 10

write_options = ImageWriter.Options(metadata)

assert isinstance(image, np.ndarray)
write_image(Path('/path/to/image.RAWMIPI10'), image, write_options)

YUV 420 buffer 8 bits:

metadata = ImageMetadata()

metadata.fileInfo.pixelType = PixelType.YUV
metadata.fileInfo.imageLayout = ImageLayout.YUV_420

write_options = ImageWriter.Options(metadata)
write_options.fileFormat = FileFormat.PLAIN

assert isinstance(image, np.ndarray)
write_image(Path('/path/to/image.yuv'), image, write_options)

NV12 buffer 8 bits:

metadata = ImageMetadata()

metadata.fileInfo.pixelType = PixelType.YUV
metadata.fileInfo.imageLayout = ImageLayout.NV12

write_options = ImageWriter.Options(metadata)
write_options.fileFormat = FileFormat.PLAIN

assert isinstance(image, np.ndarray)
write_image(Path('/path/to/image.nv12'), image, write_options)

Bayer dng 12 bits:

metadata = ImageMetadata()

metadata.fileInfo.pixelType = PixelType.BAYER_RGGB  # adapt with User's RAW Bayer pattern.
metadata.fileInfo.imageLayout = ImageLayout.PLANAR
metadata.fileInfo.pixelPrecision = 12

write_options = ImageWriter.Options(metadata)

assert isinstance(image, np.ndarray)
write_image(Path('/path/to/image.dng'), image, write_options)

RGB 8 bits images (jpg, png, tif, bmp):

metadata = ImageMetadata()

metadata.fileInfo.pixelType = PixelType.RGB
metadata.fileInfo.imageLayout = ImageLayout.INTERLEAVED

write_options = ImageWriter.Options(metadata)

assert isinstance(image, np.ndarray)
write_image(Path('/path/to/image.jpg'), image, write_options)

CFA 16 bits image:

metadata = ImageMetadata()

metadata.fileInfo.pixelType = PixelType.BAYER_RGGB  # adapt with User's RAW Bayer pattern.
metadata.fileInfo.imageLayout = ImageLayout.PLANAR
metadata.fileInfo.pixelPrecision = 16

write_options = ImageWriter.Options(metadata)

assert isinstance(image, np.ndarray)
write_image(Path('/path/to/image.cfa'), image, write_options)

Grayscale 16 bits png image:

metadata = ImageMetadata()

metadata.fileInfo.pixelType = PixelType.GRAYSCALE
metadata.fileInfo.imageLayout = ImageLayout.PLANAR
metadata.fileInfo.pixelPrecision = 16

write_options = ImageWriter.Options(metadata)

assert isinstance(image, np.ndarray)
write_image(Path('/path/to/image.png'), image, write_options)

Bayer 16 bits tif image:

metadata = ImageMetadata()

metadata.fileInfo.pixelType = PixelType.BAYER_RGGB  # adapt with User's RAW Bayer pattern.
metadata.fileInfo.imageLayout = ImageLayout.PLANAR
metadata.fileInfo.pixelPrecision = 16

write_options = ImageWriter.Options(metadata)

assert isinstance(image, np.ndarray)
write_image(Path('/path/to/image.tif'), image, write_options)

EXIF

Some image formats, like JPEG and TIFF, support EXIF reading and writing.

If supported, EXIF can be read by calling read_exif and be written by calling write_exif.

from cxx_image_io import read_exif, write_exif
from pathlib import Path

exif = read_exif(Path('/path/to/image.jpg'))

print(exif)

write_exif(Path('path/to/new_image.jpg'), exif)

print(exif) will give the following output like:

{
  'make': 'Canon',
  'model': 'Canon EOS 40D',
  'orientation': 1,
  'software': 'GIMP 2.4.5',
  'exposureTime': [1, 160],
  'fNumber': [71, 10],
  'isoSpeedRatings': 100,
  'dateTimeOriginal': '2008:05:30 15:56:01',
  'exposureBiasValue': [0, 1],
  'focalLength': [135, 1]
}

user can use help(exif) to see the definition of ExifMetdata.

EXIF metadata can be read and written along with an image by specifying them in the ImageMetadata. In this case, the EXIF wil be read and written when calling read_image and write_image.

image, metadata = read_image(Path('/path/to/image.jpg'))
metadata.exifMetadata.make = 'Custom'
write_options = ImageWriter.Options(metadata)
write_image(Path('/path/to/image.jpg'), image, write_options)

Dependencies

This project has the dependencies of the following libraries by cmake FetchContent:

Statically linked

Dynamically linked

License

This project is licensed under the MIT License - see the LICENSE.md file for details.

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

cxx_image_io-1.1.6.tar.gz (38.3 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

cxx_image_io-1.1.6-cp314-cp314-win_amd64.whl (3.9 MB view details)

Uploaded CPython 3.14Windows x86-64

cxx_image_io-1.1.6-cp314-cp314-musllinux_1_2_x86_64.whl (6.3 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

cxx_image_io-1.1.6-cp314-cp314-musllinux_1_2_aarch64.whl (6.3 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ ARM64

cxx_image_io-1.1.6-cp314-cp314-manylinux_2_28_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64

cxx_image_io-1.1.6-cp314-cp314-manylinux_2_28_aarch64.whl (5.3 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ ARM64

cxx_image_io-1.1.6-cp314-cp314-macosx_11_0_x86_64.whl (4.5 MB view details)

Uploaded CPython 3.14macOS 11.0+ x86-64

cxx_image_io-1.1.6-cp314-cp314-macosx_11_0_arm64.whl (4.0 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

cxx_image_io-1.1.6-cp313-cp313-win_amd64.whl (3.7 MB view details)

Uploaded CPython 3.13Windows x86-64

cxx_image_io-1.1.6-cp313-cp313-musllinux_1_2_x86_64.whl (6.3 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

cxx_image_io-1.1.6-cp313-cp313-musllinux_1_2_aarch64.whl (6.3 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

cxx_image_io-1.1.6-cp313-cp313-manylinux_2_28_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

cxx_image_io-1.1.6-cp313-cp313-manylinux_2_28_aarch64.whl (5.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

cxx_image_io-1.1.6-cp313-cp313-macosx_11_0_x86_64.whl (4.5 MB view details)

Uploaded CPython 3.13macOS 11.0+ x86-64

cxx_image_io-1.1.6-cp313-cp313-macosx_11_0_arm64.whl (4.0 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

cxx_image_io-1.1.6-cp312-cp312-win_amd64.whl (3.7 MB view details)

Uploaded CPython 3.12Windows x86-64

cxx_image_io-1.1.6-cp312-cp312-musllinux_1_2_x86_64.whl (6.3 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

cxx_image_io-1.1.6-cp312-cp312-musllinux_1_2_aarch64.whl (6.3 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

cxx_image_io-1.1.6-cp312-cp312-manylinux_2_28_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

cxx_image_io-1.1.6-cp312-cp312-manylinux_2_28_aarch64.whl (5.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

cxx_image_io-1.1.6-cp312-cp312-macosx_11_0_x86_64.whl (4.5 MB view details)

Uploaded CPython 3.12macOS 11.0+ x86-64

cxx_image_io-1.1.6-cp312-cp312-macosx_11_0_arm64.whl (4.0 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

cxx_image_io-1.1.6-cp311-cp311-win_amd64.whl (3.7 MB view details)

Uploaded CPython 3.11Windows x86-64

cxx_image_io-1.1.6-cp311-cp311-musllinux_1_2_x86_64.whl (6.3 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

cxx_image_io-1.1.6-cp311-cp311-musllinux_1_2_aarch64.whl (6.3 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

cxx_image_io-1.1.6-cp311-cp311-manylinux_2_28_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

cxx_image_io-1.1.6-cp311-cp311-manylinux_2_28_aarch64.whl (5.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

cxx_image_io-1.1.6-cp311-cp311-macosx_11_0_x86_64.whl (4.5 MB view details)

Uploaded CPython 3.11macOS 11.0+ x86-64

cxx_image_io-1.1.6-cp311-cp311-macosx_11_0_arm64.whl (4.0 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

cxx_image_io-1.1.6-cp310-cp310-win_amd64.whl (3.7 MB view details)

Uploaded CPython 3.10Windows x86-64

cxx_image_io-1.1.6-cp310-cp310-musllinux_1_2_x86_64.whl (6.3 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

cxx_image_io-1.1.6-cp310-cp310-musllinux_1_2_aarch64.whl (6.3 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ ARM64

cxx_image_io-1.1.6-cp310-cp310-manylinux_2_28_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

cxx_image_io-1.1.6-cp310-cp310-manylinux_2_28_aarch64.whl (5.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

cxx_image_io-1.1.6-cp310-cp310-macosx_11_0_x86_64.whl (4.5 MB view details)

Uploaded CPython 3.10macOS 11.0+ x86-64

cxx_image_io-1.1.6-cp310-cp310-macosx_11_0_arm64.whl (4.0 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file cxx_image_io-1.1.6.tar.gz.

File metadata

  • Download URL: cxx_image_io-1.1.6.tar.gz
  • Upload date:
  • Size: 38.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for cxx_image_io-1.1.6.tar.gz
Algorithm Hash digest
SHA256 ccfdf3fbc1a6947b17ccc9422602a68a24ffe60b4854d280da0b8d31bdb5e69e
MD5 000d92cd741a3e9d40329cc3d867cef9
BLAKE2b-256 6315095f33134efd62dfc0558d2ef2d6802a473a70a93812e94cd6a62421336e

See more details on using hashes here.

File details

Details for the file cxx_image_io-1.1.6-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for cxx_image_io-1.1.6-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 edde9163e2b466854a8c257fd25924fcc2114b8ad1851522252f69558fd5cdae
MD5 b38cc773651113d9ea4b76c985090610
BLAKE2b-256 811b76b68c96f9d5520d06c32db58131b882c676786559a295092dfc4ed3058b

See more details on using hashes here.

File details

Details for the file cxx_image_io-1.1.6-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cxx_image_io-1.1.6-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c8b93fe67e655545dd5c49750c0029bc3177776f290abfedc69ae07dfdf25657
MD5 dadaf87b7c48b38a9ead2d421524198a
BLAKE2b-256 f70b36aaecd72b28d70f9a20e80d818c9d5c2ab9c057d0017cc55f77c11706ed

See more details on using hashes here.

File details

Details for the file cxx_image_io-1.1.6-cp314-cp314-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for cxx_image_io-1.1.6-cp314-cp314-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 e50ef3b74cd3e916f040eb451d76cf5f3bb8e69271428842509387fb5cbb4cc3
MD5 e83ad3efe5f40f63c169986903b77773
BLAKE2b-256 f5e9d98f57ab7f38769cb0b07daa8f800a770a445c798dee25585146b230f3ad

See more details on using hashes here.

File details

Details for the file cxx_image_io-1.1.6-cp314-cp314-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for cxx_image_io-1.1.6-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3cec757fcfa731811be21144b44587893045a1f59d1c221c3732fe527e3a99bb
MD5 4b9858aa1459832461b322f7dfc5120d
BLAKE2b-256 eb2ea0e7e82dbc0c577eb14d3c484ed17dce10cbf930f95737e301f44f24dde4

See more details on using hashes here.

File details

Details for the file cxx_image_io-1.1.6-cp314-cp314-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for cxx_image_io-1.1.6-cp314-cp314-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 4f923ed87316d18ceb3365792e5aac324d52f2c1ad2bb1583f538929c68ade12
MD5 6077685c9daebd30c0c8338394dd691c
BLAKE2b-256 5cf300c5bced636ce07295194da5426edaaae86581e7778a650b64f5e0716742

See more details on using hashes here.

File details

Details for the file cxx_image_io-1.1.6-cp314-cp314-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for cxx_image_io-1.1.6-cp314-cp314-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 32841cab5bd3a8159cb7a4c49066e890fc852117f62978001bb305e9e2979c07
MD5 61f0abbf667be02b9e87d343bcd98953
BLAKE2b-256 e7b58a31f33bf4211490242a432d5aac5731a290bc2f5697083d8e97de1b80af

See more details on using hashes here.

File details

Details for the file cxx_image_io-1.1.6-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cxx_image_io-1.1.6-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 56174f9092f94c07accbf3a79d123952d44175e2f6e44f4d4ece9c469211c169
MD5 73f620848d8bd7658b373a9c70106f79
BLAKE2b-256 e4af6ca5f26b95ed9d92bfe190582513d3787df7e1eef450ad99746439717c06

See more details on using hashes here.

File details

Details for the file cxx_image_io-1.1.6-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for cxx_image_io-1.1.6-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 d7b6e0b1e1b3d023c3678cc790fe852fd35e890facc818bf8cd5a2dcb2c14417
MD5 4499e962bd70433b5ef3ce60498b7bff
BLAKE2b-256 961dccee2619a716132b65b7b09750d770ae5ee5d24c844ed5dbd05fd893fa70

See more details on using hashes here.

File details

Details for the file cxx_image_io-1.1.6-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cxx_image_io-1.1.6-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 36493863b58b68044c3026537c8c924fbc7f03ccc65b69b0308a87317542053f
MD5 c71ee20ae7b6a8663eb29c6bce344076
BLAKE2b-256 808418d45f9f074a7d09ec2031e8f73e7d3cab9f75166ed54bc2adaca4fadd39

See more details on using hashes here.

File details

Details for the file cxx_image_io-1.1.6-cp313-cp313-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for cxx_image_io-1.1.6-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 eb885349e790f5e171020afdfcd8d763e4a9aea38245da5f5fb7742872f9868f
MD5 e1d7f5cd817763041c98eccf304811ef
BLAKE2b-256 2b3d4129f38d9819b25d5ba20f2422ba27560bdc3aa4e77e0930f569c9ced22a

See more details on using hashes here.

File details

Details for the file cxx_image_io-1.1.6-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for cxx_image_io-1.1.6-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 537289a05694b8e4922d9d8fda330549049ea514e80abb610a4c3f9d634aa924
MD5 0a114b578fef9acd41166f458dd2a108
BLAKE2b-256 f785c55820777c854f73f26bd24f839e62d6610fb6ac8e3961d5b9f5c85e914f

See more details on using hashes here.

File details

Details for the file cxx_image_io-1.1.6-cp313-cp313-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for cxx_image_io-1.1.6-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 0518c6d7c1a4d94e7dd3416fb8b987d188a7a1a4c4df3d9a193efaef5e31c9d8
MD5 8f3fcbd4411502c6f620016fe32bb60b
BLAKE2b-256 38b89871debd515d7d047883ffa41b0ba7000fb9c251677b90c6a67a749efc67

See more details on using hashes here.

File details

Details for the file cxx_image_io-1.1.6-cp313-cp313-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for cxx_image_io-1.1.6-cp313-cp313-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 b51e02056fb30f3fe25b5b36c5e092ac0f40fed4fad058bb521bf38cab533888
MD5 ba23a3f97e014cfa7f083b01bcb4b31f
BLAKE2b-256 23c037477c7d4eafa14cf8f30be641fc1fc746bfd0169bc28f24d4f5f3c9c8ee

See more details on using hashes here.

File details

Details for the file cxx_image_io-1.1.6-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cxx_image_io-1.1.6-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 19bc0572e9225360c94616deb1133172211a2d64e92c32472e7bb10c83faa214
MD5 c0173cd8ab1258f2a42a5e2e7decb725
BLAKE2b-256 6ca5202caa912da576262320af87ec4bfdfc1a16a3575d7f6ad665d800904a5b

See more details on using hashes here.

File details

Details for the file cxx_image_io-1.1.6-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for cxx_image_io-1.1.6-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 e1fb141af397b425deb2e6ae588d48bb07de2f721a3571cb12c05ba5d8479ce0
MD5 8cd806fbd7f55cc7619c70e782fc3d25
BLAKE2b-256 eb95a979005d19080ed237b20cfe8e2fdca22c46d82d6bec1f73dc51e7242ff7

See more details on using hashes here.

File details

Details for the file cxx_image_io-1.1.6-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cxx_image_io-1.1.6-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 219788d9278f1e0107c20c98a4f6744c7e2db6d7783ec58c6ced252c0890fb9e
MD5 a5130d36e18a8ec50aa978e34e3cfc31
BLAKE2b-256 5fbdf0dfd25ae341eeca146413043377fcbb251a114fbbfc04d72f7cfc3b0e57

See more details on using hashes here.

File details

Details for the file cxx_image_io-1.1.6-cp312-cp312-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for cxx_image_io-1.1.6-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 8ed4f8fb285810e583dc5eb6216d00080cbc723b21d7a4fd13e5c7b269804ca2
MD5 9003a59322cbe5216b2c22ca86ef4178
BLAKE2b-256 47614514f22e6d459c559d5650ed804b867a65b973e65fc1e36142c061150a90

See more details on using hashes here.

File details

Details for the file cxx_image_io-1.1.6-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for cxx_image_io-1.1.6-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e1e7622ac5fa18cd50fe04acf7887c08262314c06209dcd6bf4251027466973f
MD5 14a88fb7b07ab29a1aeba19c448b1c88
BLAKE2b-256 8c65d182d43e87fcf13c34dbb3dba7afb8d4b316ec601186bdb2d925ca68ffd7

See more details on using hashes here.

File details

Details for the file cxx_image_io-1.1.6-cp312-cp312-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for cxx_image_io-1.1.6-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ec09868e4a9f0ab20f66fb8924d7103c029e731d088a6bc3bd4dc5e17094cfd2
MD5 ce6b5107bcf24ae45b55861402b7eee0
BLAKE2b-256 7042133eb864a8f1adeb79d21fe8596fa594c404c0ee23eb76a5afe55355646b

See more details on using hashes here.

File details

Details for the file cxx_image_io-1.1.6-cp312-cp312-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for cxx_image_io-1.1.6-cp312-cp312-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 d33fc157735c67d83ac56ef45e26567af1b2b6f7b6bc590f16591be4219e3b14
MD5 ea8e73dc86ea611a901dc94e0247ac31
BLAKE2b-256 89da682c1417e977ff60dc094e394d6273a6558470b1750126d0846bff4857ad

See more details on using hashes here.

File details

Details for the file cxx_image_io-1.1.6-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cxx_image_io-1.1.6-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 62d2a8d72f2a16294cfc7a983c67c45e2ec98715e1dbdcc987a56b8fe3488b50
MD5 107a63fed741642f2634af0f2e148ef2
BLAKE2b-256 c114f1c86e867899f7bb596dd27ae48cb8f0f4f19f839f463b4fb5d0a80cb9b9

See more details on using hashes here.

File details

Details for the file cxx_image_io-1.1.6-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for cxx_image_io-1.1.6-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 58f3bb53210e6e3df551d9ba5a89ac6846398ed028537a8817317672b0521771
MD5 d2732076398189aa100a60239864e438
BLAKE2b-256 0653e3602076857dd02a526354a5ade1458b58165ed45dd6e83b4b3cfcc6e549

See more details on using hashes here.

File details

Details for the file cxx_image_io-1.1.6-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cxx_image_io-1.1.6-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5c102aeb52c138001139e3079027478a43d006f5c2b23d261f3db4f20054d001
MD5 a220d6e2bbc917fc4ec9dbbd7377f530
BLAKE2b-256 150d338f02ed91bcba35005447a6a5c001f34a53da31520dff5db40b6d0c841e

See more details on using hashes here.

File details

Details for the file cxx_image_io-1.1.6-cp311-cp311-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for cxx_image_io-1.1.6-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 7945760653133aff422494f7a17e08416aaae79467cbe9c3b23df52703a262db
MD5 5c4e47732e99654008405b9d353e741e
BLAKE2b-256 b6903147d34a5cf8aab123886cfe867c5afeed86e05a3f2d2f173be0362deb8f

See more details on using hashes here.

File details

Details for the file cxx_image_io-1.1.6-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for cxx_image_io-1.1.6-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 842b0f95f8ed8ea8ca82a1f61a1f8c2a9a16cbe7291b51f0d3b008801e3d7bd8
MD5 5f5dc77d7f525752c9084274b8809c67
BLAKE2b-256 1a8c40aa9a78d79274d613cd56ecdcdc5caed5bf5d0d08425ebd49502db41f7a

See more details on using hashes here.

File details

Details for the file cxx_image_io-1.1.6-cp311-cp311-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for cxx_image_io-1.1.6-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 47721cb5ed35ca8e5e9723b04866af48a5482fc2f266aeae0e633f18295702f5
MD5 ca82cafb97404ccde6992071548a8070
BLAKE2b-256 b21124a635ba3158884a06bea56afe579d0edb6e7f92217af1fc44d6f512298f

See more details on using hashes here.

File details

Details for the file cxx_image_io-1.1.6-cp311-cp311-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for cxx_image_io-1.1.6-cp311-cp311-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 915b7b501db1af97c10e15c92df967005351363ff69167ad63147de969b909d5
MD5 04ef03f6175395d930062d0fe746688d
BLAKE2b-256 98f826f452c9c2d42ef9e02ea822cce714f1fa761a50f81964ad5b34f8570374

See more details on using hashes here.

File details

Details for the file cxx_image_io-1.1.6-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cxx_image_io-1.1.6-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3c89f614c34b9ff09a0c550691a92ac4bd67a8457c8b0f6835eca56d96a0e75f
MD5 b1395d01675d916acc975d8698bc1cd2
BLAKE2b-256 4098f8a79019958f64b04a97ccb2f517eabec83988291332815c05aafdeaa78e

See more details on using hashes here.

File details

Details for the file cxx_image_io-1.1.6-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for cxx_image_io-1.1.6-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 414ce4e15ed6a523e0bfc1e827a66b9f0b511c87f962e0038920c2061fd9f1ac
MD5 5fbf646ef4fd6e4af12f05994a806ca7
BLAKE2b-256 92996d3a69debf99c8e8a56fa8936a77b993574d961c44db6df49dc77611513a

See more details on using hashes here.

File details

Details for the file cxx_image_io-1.1.6-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cxx_image_io-1.1.6-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c3f92fa4050fc9d70de5a886509f13636dfdee0d493fb051f52cec1ba24079ba
MD5 f808da6dfa0cacfeaf44a80e8885dc22
BLAKE2b-256 f3d3581f82370cfc68ad67ad2f8710cc10be4eda5ce0e42ca0ed4101652924ab

See more details on using hashes here.

File details

Details for the file cxx_image_io-1.1.6-cp310-cp310-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for cxx_image_io-1.1.6-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 9b3ab497b4f7784c9f55e82a950e18abfa0bd39ebde9f121eda5ff8f5edbe980
MD5 548ad0bc6873ef0b5e1f8bb8ddedafc8
BLAKE2b-256 24d1aa4d5ffe5f0f9aa065c7e2e8ae2251f5201e98cfc3313c9376167e7809c3

See more details on using hashes here.

File details

Details for the file cxx_image_io-1.1.6-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for cxx_image_io-1.1.6-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bc4e45ffd8d91f4481d7f93bfda64baef21f741c1b895abfd06fddf482840c81
MD5 0f512a972506d868785e54bcb6955286
BLAKE2b-256 14d6a00a67a2997a91f4e3fbc0af48fe277934b8f5b4be0f0f8266924a73e555

See more details on using hashes here.

File details

Details for the file cxx_image_io-1.1.6-cp310-cp310-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for cxx_image_io-1.1.6-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 75749c208d2dbc259c56d6ebfa0c751041e759369df2cba1517bc3f7104ae256
MD5 acd340fa0ff0bc68187a2173740e7a07
BLAKE2b-256 e6eb9191c824d87ca514a46d15bbacd99ddf3c07bfb320dd377daaaa5a7a6a26

See more details on using hashes here.

File details

Details for the file cxx_image_io-1.1.6-cp310-cp310-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for cxx_image_io-1.1.6-cp310-cp310-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 0cd02fae9d96427f47482acf05aa5e1e71b179973d1603f70626d1555f8ffd25
MD5 d566616a210718a8aedd67633aa53270
BLAKE2b-256 dc7733bdcf22df3ae565d4446ae26644f00332992d0e941abf226c24f1ada265

See more details on using hashes here.

File details

Details for the file cxx_image_io-1.1.6-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cxx_image_io-1.1.6-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 49182f3e41c3c58a05c9cf02d03e601c2b273df4f8c1b688e9f1860e224035d6
MD5 1d8df82249ab435688c5df3c15338510
BLAKE2b-256 3ac06395065825bd5b3d899012a07f9ab676ecae92e91a33323a12595bee438f

See more details on using hashes here.

Supported by

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