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.7.tar.gz (38.5 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.7-cp314-cp314-win_amd64.whl (3.9 MB view details)

Uploaded CPython 3.14Windows x86-64

cxx_image_io-1.1.7-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.7-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.7-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.7-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.7-cp314-cp314-macosx_11_0_arm64.whl (4.0 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

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

Uploaded CPython 3.13Windows x86-64

cxx_image_io-1.1.7-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.7-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.7-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.7-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.7-cp313-cp313-macosx_11_0_arm64.whl (4.0 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

cxx_image_io-1.1.7-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.7-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.7-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.7-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.7-cp312-cp312-macosx_11_0_arm64.whl (4.0 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

cxx_image_io-1.1.7-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.7-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.7-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.7-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.7-cp311-cp311-macosx_11_0_arm64.whl (4.0 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

cxx_image_io-1.1.7-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.7-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.7-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.7-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.7-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.7.tar.gz.

File metadata

  • Download URL: cxx_image_io-1.1.7.tar.gz
  • Upload date:
  • Size: 38.5 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.7.tar.gz
Algorithm Hash digest
SHA256 581dba8067a1725e7a2b73019a6a250c4ab795c60b8e5d9a97491266f44755eb
MD5 1babc9271910dd367605a2b22dba4c9b
BLAKE2b-256 865e8a96c7f50651cce258789050e925ac25d6f4197eb5af9ef0f78faaa6c248

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cxx_image_io-1.1.7-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 1cbb73c0c3e78cc6df617ff3fb4b35559f438fe8ba53f63014086439e7c8139c
MD5 f12552589a5bc3a1529e059d91b08e8e
BLAKE2b-256 74703f579ef55d8326bf713df29f3b9bd7f43d36edac479ff396319e097d19a1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cxx_image_io-1.1.7-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 89b87cfa634cd4753ecec45e2fab248c37bee6c0dfadaa645112538ce8d472b8
MD5 a3e02b92d6f2c5e2cf6f07cca8c66119
BLAKE2b-256 16044741041b9263d9130e62875b5520c4579a34fb6bf043016b6e7c2fd2c969

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cxx_image_io-1.1.7-cp314-cp314-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 7d74429b00e87ea234599a75bac614a3973efcbc5b7bc89e818eedbface27a1a
MD5 aa79485ba103520fd83ae6773fbe4133
BLAKE2b-256 efdbf874e4b36a0d8e02d59fde74184f1d535b8de601836548070e68c68ba69e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cxx_image_io-1.1.7-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8dbb9c36f9a87f2591dfd59d4acaffca35cb535640a151cd8ce2adef0f0cdbb6
MD5 005ef07ad78769e8b011a72238f888a1
BLAKE2b-256 d939b08e58c6eb383fbd6757bacf192f19b1dbf5c2f303104c073b23247bda33

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cxx_image_io-1.1.7-cp314-cp314-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 890828eafd8431f78c27d89f55e15d8edff32ad1f2b8a7c53f8d037827bf7df5
MD5 d5709f0bcd5dc4760ca756fed152ecf6
BLAKE2b-256 0e108a7f830d5b4ab4f1a914bdaeaa08eda736e24419fc14fa02411153a4c3b6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cxx_image_io-1.1.7-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1ff985add8de63afde4a97eca0ec5ccfc596e71d2e4da60b47a0fb7809d97182
MD5 a37b0d289de155487b7ca5f70c6e4130
BLAKE2b-256 bc3770a6ccdd28bf4def293795a42f71f87a36eb0453273bb233dc5c54643d6d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cxx_image_io-1.1.7-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 4c91ef61de0bcceae77b9bf64fccc72968d97cdd1285ad92ad81660ff137f3db
MD5 276762a3d72bc8cc8afe308fb89db824
BLAKE2b-256 1a87a7aefdc86f922aa19e1d453bc5e60425e9e2ebab44be8af25f523531b952

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cxx_image_io-1.1.7-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c45c7d1846d4f369949c84a9cbd861297947c955ef323650ca100a1998ccf2ad
MD5 f55606ddbd6e159b2b05e73f2fe432fc
BLAKE2b-256 0c155648adae6b1525de19bbd36f849a9dc056214cd5029e090a933b58d2e137

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cxx_image_io-1.1.7-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 858ad04a4e6b06b6e26431103e3d5c7aee0c97d493b439c8dca946f0983687f7
MD5 4fb4d44e14522157dc45555e99e5bd34
BLAKE2b-256 7479c8086375d8ed6010b4d6f57205508b2a66773805453a19112eef0c380873

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cxx_image_io-1.1.7-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 769ae29608e6e373ddc3407528a0473d052969a19392762e6d2f3aa34f48b9cd
MD5 a090f5d745f455aa7290310733192ef5
BLAKE2b-256 fa43a2e4134514f5d201c52b2099ace95b339eae17324c015ff6c4c7e61e26d0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cxx_image_io-1.1.7-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a7faa849d6c2fcf0d05e804b50ff6014248bf7e3f5d1118376c5ed69a3636c39
MD5 2b2b2dbab54b5955cd8a5f4aa332f0f1
BLAKE2b-256 4a8e186d48715acd0bb941ff626206c4a8dd2dfb368b17a0b4c2fd4098ae7e96

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cxx_image_io-1.1.7-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b3e92c64b35a9b40ab340aeaa82b023398945be67bc6bb9fe5b8e52f67ef6a18
MD5 36b792b8ba2e2f0ae40c8cf3cfed8424
BLAKE2b-256 8c490212674ede2778a02b83d151c197123b43a3d7d54bf293ddfacc9e9204b1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cxx_image_io-1.1.7-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 20b1cf6bf4bdf28809f458b6c400ba46b97d4c360dba3e3da63c58deb10f6579
MD5 b25bed1590da69f4d555f701ace6fdab
BLAKE2b-256 d8dd9188909af26dac1bbc68af0ea0902e75f33b370cdd005852c37bbe48ee4c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cxx_image_io-1.1.7-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 1a05924e073040c81c3bd2b92521006374d44c65173c65b07aca5059f6843b74
MD5 8270cffb43cb3b5ed320beb619ce3669
BLAKE2b-256 4d1f15e22a39535825413489b708feb789fd63dea26a0ca36fa6299aa033ac47

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cxx_image_io-1.1.7-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 da3aff202fbc04a8e30f90b64a51a92feef95e1a4f1fe684cff25c5122da7fe7
MD5 685d752a6575c43d06abb6aea115a37c
BLAKE2b-256 16b40bab318e67b3d53e486d855f0bad259a95ff96709a8232769ba1901bd0db

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cxx_image_io-1.1.7-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b8748623c1259d5a70d81714f8d514e3a9e6c0bb3c58fb39249236b5837b7e67
MD5 2b73ecc234297fc9090fa115190b1333
BLAKE2b-256 e737162928ff555af150cc123af0bf4fb7578b993442f1028b7e1845712e1a89

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cxx_image_io-1.1.7-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7a259bd59e83b80e8885c64098ef8b41ef8441764ec3811ba5da08c3be1be86f
MD5 e6420353041ea3134d37f61f0c2237c7
BLAKE2b-256 a56d7973fca932f80a7271298d932ebd30abab3f2abb4ec8960e21c9492e3dfb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cxx_image_io-1.1.7-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8454d5d6d64a249f94b388a303a416c577d71d38ab4a97606354472e53d8de62
MD5 cc77c737b0522e0e28ad3804403245b8
BLAKE2b-256 11de418c0523368883bed71d398b5db46e0d6316f50773f5e8de0173e9c980ca

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cxx_image_io-1.1.7-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 f65b6d602c7f2a76ceda0f4285f427f0b51f6a2e045e77137adba70d1db3a4d6
MD5 411596533dbca55249235fc88e5675db
BLAKE2b-256 efe21643681f93a4bca41f24e59012cfcb1064471b570f906d15e0f36f715aef

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cxx_image_io-1.1.7-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f0f0d67966db24b5acb0d3691eea87375d99739d6e6d1426c2e1a72ba715e97c
MD5 71499490e4cab0367a3d2ae327231767
BLAKE2b-256 8ff636197015aa7d6a8563a17f317eb05d6c684b0aff6dbc803e114a91a88895

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cxx_image_io-1.1.7-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 20eb5a3592bcfd03cf615dbfcc757993b90018c4c229dba12921375f07932bc2
MD5 c1be5bd3ddc600a7b8eeaad27fdfdea7
BLAKE2b-256 b54821050a825838f4eaf3d049dad1a3a7ddf069cd49e839daba298eefd2ff7e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cxx_image_io-1.1.7-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 61e4e82c7690081be5aafbc2371733461df02807a735112472fe925b0a9f6049
MD5 9a9489823d6631bcead79e41aca3436c
BLAKE2b-256 f487a6f78bd9867e88a5b17fc99e3b9295b4032e3ea7fecb65bc72d33fd2794a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cxx_image_io-1.1.7-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 1fe2f899902d4e3848425aa1555396746bedaf877ae137bbe4455c2cae2f92f9
MD5 1c15fea1ad1d45af183d2ccb17a92abf
BLAKE2b-256 602e12b777dc1c8fbffc44c20785d9208cf50cd412cb0c09da99768d007a5573

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cxx_image_io-1.1.7-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a5b2bed1e3cf5fa28397bfd4bbb03f8d8342f648a2beff0529236b2368cd3dc3
MD5 2848f763ffbd62fa80158d644bdd47c6
BLAKE2b-256 aa54e9f02eb9fc6c6233864f99956778631a47aceb1df2654d92c16a67aa8ae5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cxx_image_io-1.1.7-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 1d11fa01499955539734aa36fc7335b92ea18321272711de09767d4e2279498a
MD5 d12d7d7a5e30a8c8cc388b8e2476aa12
BLAKE2b-256 f0a97f6790f45ec66ae509be275d8a000c8fcb5598d5eb0704deb885680c85f8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cxx_image_io-1.1.7-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 6eb2f20efdded5ad7250d99f0ef2591f9c8cbad90ab6597bf550d9a96ceb80a4
MD5 16266f9fd93d75ba17b0a157d843e0aa
BLAKE2b-256 ec3346f12f50ac4e1da78bb34171226f9b860d3ed79935aa4ab73b1a727bd2ef

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cxx_image_io-1.1.7-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 a3ef0375c979019ff0b7d4fc5cc520ecea02c8d015e51497f9bd8d534d3c4bd5
MD5 121e8460c995ebbafc2c7c8f8263c168
BLAKE2b-256 690e45f098b176d6dcd0df2f6c65e82db375bbe0f71d729a5c84bfc2281e339c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cxx_image_io-1.1.7-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a2b1c45fae68f101206d58d320a88068bb28c1913137119ba72810c80cc7fc55
MD5 9d33fb8bcd6c4c60eeeb50fb1ff317a6
BLAKE2b-256 95d95daff41d8ad8b37e862c8821f456c92cc0c1ef12240232b25ebda5d172df

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cxx_image_io-1.1.7-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 68bc886321f4f387a39362639d6efe09fddb0364babd77d83855cb03c07cdd4f
MD5 a3adcd0c88d57cae0e73da8c5523b0f6
BLAKE2b-256 38ad2257870069b88f62408890ec2050abb03a109a202a9328f2f730602670e2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cxx_image_io-1.1.7-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 720444c8e26c679431d9e4de40f7705de6ea863eed76c7c8cb35e46b3a656022
MD5 6bf2d42108503b4278da5afe9573d0ee
BLAKE2b-256 08686b12470524712601d51601a49109e05f76bdf9df0d39fbfa924775d3d93f

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