Skip to main content

Zero-dependency image processing library

Project description

Zignal Python Bindings

Zero-dependency image processing library written in Zig with Python bindings.

Installation

pip install zignal-processing

Quick Start

import zignal

# Create RGB color
red = zignal.Rgb(255, 0, 0)
print(f"Red color: {red}")

# Convert to HSV
hsv = red.to_hsv()
print(f"HSV: {hsv}")

# Convert to other color spaces
lab = red.to_lab()
oklab = red.to_oklab()
xyz = red.to_xyz()

Features

  • 12 Color Spaces: RGB, RGBA, HSV, HSL, Lab, XYZ, Oklab, Oklch, LCH, LMS, XYB, YCbCr
  • Seamless Conversions: Convert between any supported color spaces
  • Type Safety: Strong typing with validation for color components
  • Zero Dependencies: No external dependencies, pure Zig implementation
  • High Performance: Native performance with minimal overhead
  • Cross Platform: Works on Linux, macOS, and Windows (x86_64 and ARM64)

Supported Color Spaces

  • RGB/RGBA: Standard RGB with optional alpha channel (0-255)
  • HSV: Hue, Saturation, Value (0-360°, 0-100%, 0-100%)
  • HSL: Hue, Saturation, Lightness (0-360°, 0-100%, 0-100%)
  • Lab: CIELAB perceptual color space
  • XYZ: CIE 1931 XYZ color space
  • Oklab: Perceptually uniform color space by Björn Ottosson
  • Oklch: Cylindrical representation of Oklab
  • LCH: Cylindrical representation of Lab
  • LMS: Long, Medium, Short cone response
  • XYB: Color space used in JPEG XL
  • YCbCr: Luma and chroma components

Examples

Color Space Conversions

# Create a color in any space
hsl = zignal.Hsl(180.0, 50.0, 50.0)  # Cyan-ish color

# Convert to any other space
rgb = hsl.to_rgb()
lab = hsl.to_lab()
oklab = hsl.to_oklab()

# Chain conversions
original = zignal.Rgb(128, 64, 192)
hsv = original.to_hsv()
back_to_rgb = hsv.to_rgb()

Working with Alpha Channel

# Create RGBA color
rgba = zignal.Rgba(255, 128, 0, 200)  # Orange with transparency

# Convert RGB to RGBA (default alpha=255)
rgb = zignal.Rgb(255, 128, 0)
rgba = rgb.to_rgba()

Modern Color Spaces

# Oklab - perceptually uniform color space
oklab = zignal.Oklab(0.5, 0.1, -0.05)
oklch = oklab.to_oklch()  # Convert to cylindrical form

# Work with perceptual properties
print(f"Lightness: {oklch.l}")
print(f"Chroma: {oklch.c}")
print(f"Hue: {oklch.h}")

NumPy Integration (Optional)

If NumPy is installed, you can work with image arrays:

import numpy as np
import zignal

# Create numpy array (supports both RGB and RGBA)
arr_rgb = np.zeros((100, 200, 3), dtype=np.uint8)
arr_rgb[50, 100] = [255, 0, 0]  # Red pixel

# Convert to Image (allocates RGBA internally for SIMD performance)
img = zignal.Image.from_numpy(arr_rgb)

# For zero-copy with 4-channel arrays, use the helper:
arr_rgba = zignal.Image.add_alpha(arr_rgb)  # Adds alpha=255
img = zignal.Image.from_numpy(arr_rgba)  # Zero-copy!

# Convert back to numpy
arr2 = img.to_numpy()  # Returns RGBA (4 channels) by default
arr3 = img.to_numpy(include_alpha=False)  # Returns RGB (3 channels)

# Load and save images
img = zignal.Image.load("input.png")  # Supports PNG and JPEG
img.save("output.png")

Performance Note: The Image class uses RGBA storage internally for SIMD-optimized operations. This provides 2-5x performance improvements for resize and interpolation operations. When using 3-channel RGB arrays, they are automatically converted to RGBA with alpha=255.

Note: NumPy is not required for basic color operations.

Building from Source

Requires Zig compiler:

git clone https://github.com/bfactory-ai/zignal
cd zignal/bindings/python
pip install -e .

License

MIT License

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

zignal_processing-0.4.1.tar.gz (17.4 kB view details)

Uploaded Source

Built Distributions

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

zignal_processing-0.4.1-cp313-cp313-win_amd64.whl (327.2 kB view details)

Uploaded CPython 3.13Windows x86-64

zignal_processing-0.4.1-cp313-cp313-manylinux1_x86_64.whl (307.9 kB view details)

Uploaded CPython 3.13

zignal_processing-0.4.1-cp313-cp313-macosx_11_0_arm64.whl (259.7 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

zignal_processing-0.4.1-cp313-cp313-macosx_10_9_x86_64.whl (292.9 kB view details)

Uploaded CPython 3.13macOS 10.9+ x86-64

zignal_processing-0.4.1-cp312-cp312-win_amd64.whl (327.2 kB view details)

Uploaded CPython 3.12Windows x86-64

zignal_processing-0.4.1-cp312-cp312-manylinux1_x86_64.whl (307.9 kB view details)

Uploaded CPython 3.12

zignal_processing-0.4.1-cp312-cp312-macosx_11_0_arm64.whl (259.6 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

zignal_processing-0.4.1-cp312-cp312-macosx_10_9_x86_64.whl (292.9 kB view details)

Uploaded CPython 3.12macOS 10.9+ x86-64

zignal_processing-0.4.1-cp311-cp311-win_amd64.whl (327.3 kB view details)

Uploaded CPython 3.11Windows x86-64

zignal_processing-0.4.1-cp311-cp311-manylinux1_x86_64.whl (307.7 kB view details)

Uploaded CPython 3.11

zignal_processing-0.4.1-cp311-cp311-macosx_11_0_arm64.whl (259.4 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

zignal_processing-0.4.1-cp311-cp311-macosx_10_9_x86_64.whl (292.8 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

zignal_processing-0.4.1-cp310-cp310-win_amd64.whl (327.4 kB view details)

Uploaded CPython 3.10Windows x86-64

zignal_processing-0.4.1-cp310-cp310-manylinux1_x86_64.whl (307.9 kB view details)

Uploaded CPython 3.10

zignal_processing-0.4.1-cp310-cp310-macosx_11_0_arm64.whl (259.5 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

zignal_processing-0.4.1-cp310-cp310-macosx_10_9_x86_64.whl (293.0 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

Details for the file zignal_processing-0.4.1.tar.gz.

File metadata

  • Download URL: zignal_processing-0.4.1.tar.gz
  • Upload date:
  • Size: 17.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for zignal_processing-0.4.1.tar.gz
Algorithm Hash digest
SHA256 ca3f8ef7872ada8c9d3a462904c55f05b68e912c15d4193daaf5327e4513d4a0
MD5 ea9ca11f9b41b6facda01db5169e35ae
BLAKE2b-256 f459159912658e02789cf996bdacae4dc545b8e298756476767f9a6bf67439c5

See more details on using hashes here.

File details

Details for the file zignal_processing-0.4.1-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for zignal_processing-0.4.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 d1d0f075afe473c2240f59c24c4887b521807b7cb8bb539aabf7962e0bcbcbee
MD5 b1100bd6ee37cff840de8cf3e7759dea
BLAKE2b-256 e2487409a5e3c764dcfbffcb18b4e022fcf39da255f3b7f2c2cdf7060620edbf

See more details on using hashes here.

File details

Details for the file zignal_processing-0.4.1-cp313-cp313-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for zignal_processing-0.4.1-cp313-cp313-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 da9fa1afab53257e0a854fa977d606f2a52373a15cf41903d77592a2ea06b930
MD5 28c2bad8317fde64d0073350f0c4ad9d
BLAKE2b-256 98908ac39c898c682b493a9fa285037bb5cb9d3b5bf47223247584b68cdcd37b

See more details on using hashes here.

File details

Details for the file zignal_processing-0.4.1-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zignal_processing-0.4.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 75a4028c1469efd7c8a219b6bd0aa53636b4930cc3b3b0fb244ce3a550089779
MD5 11cfdb5b29aced72ba00613fdd60720b
BLAKE2b-256 65fa55098efb9193192e52d85b3721c937a2beb07450f13897111b2b0521ed08

See more details on using hashes here.

File details

Details for the file zignal_processing-0.4.1-cp313-cp313-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for zignal_processing-0.4.1-cp313-cp313-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 fd78e1305ed2d7e25f59e605d8d89f03c28cbcf7a4d77bc437b67c414fb7234d
MD5 a26373a8a40ee50be33d715e511972af
BLAKE2b-256 c5192847173b046bedbdec176f2e0cb201ecb7702a6aefa9581bdccfc9f3f643

See more details on using hashes here.

File details

Details for the file zignal_processing-0.4.1-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for zignal_processing-0.4.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 bcfcafeae8bfd3dabd5487ccac9ca7d78753d9b51697929c3591560825e4fc41
MD5 02882b57616b8bf3ccb7eae5bc4f09e9
BLAKE2b-256 601c47ee3f631ed3d96be11337d1ef4b8f95097c63d5b6fe9ea83973a11dbd9a

See more details on using hashes here.

File details

Details for the file zignal_processing-0.4.1-cp312-cp312-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for zignal_processing-0.4.1-cp312-cp312-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 f9f661f11668b43a99818ce9842f53767ba0082d702b53c4b6e7a07cfd0a876d
MD5 2dfb5949033349aa86b14732e84e0bb8
BLAKE2b-256 d3b90fb71bd7359c35888a58faff12dc6aad122f1b885de96032eb62c7f36a69

See more details on using hashes here.

File details

Details for the file zignal_processing-0.4.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zignal_processing-0.4.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4f67f29f62a817835072947e2a082628c6dbb899ee7aa968449990d9802487a9
MD5 c6006e1775d91d5b43c89554b26b5a56
BLAKE2b-256 2d88f21b21d25afc84f02d0d0525844a54230027f64e1d8a3f01bf6dce2fcf29

See more details on using hashes here.

File details

Details for the file zignal_processing-0.4.1-cp312-cp312-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for zignal_processing-0.4.1-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 dc4ad3c19d60d6a4ee5da8bdcb28a0e3ed42d84f8bd39f8433f72e5cbaf2a638
MD5 277e026b488afcd825ab785a4fc6cae1
BLAKE2b-256 f37527375ef943a85b81d5f91ab4b2417e6b0082648645624dcb603b171e7d3d

See more details on using hashes here.

File details

Details for the file zignal_processing-0.4.1-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for zignal_processing-0.4.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 330b975ddfa18e652acebb29d5dc78be5ca82aa75af1a6c1a18278cb4567f64a
MD5 e8f8264800aa3201c85e5a25d152f5fa
BLAKE2b-256 19b38f223395331dbd6295532958b3632de78260e65ada1ea88e0e7314e5196c

See more details on using hashes here.

File details

Details for the file zignal_processing-0.4.1-cp311-cp311-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for zignal_processing-0.4.1-cp311-cp311-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 92618edad242605f3ccb746591af3e157ad91444b9f01e53077c79685fc4dc67
MD5 7f1fc08ad600a297f71266cde4e133f9
BLAKE2b-256 401e50a8f7f684dddc23ecf6a3ed7fd15c2f68a739937512da3281af8fd66364

See more details on using hashes here.

File details

Details for the file zignal_processing-0.4.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zignal_processing-0.4.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b372a696e78a9d23c72c8f01690933cf635d450345f0f04ed38c53535cbb4fb2
MD5 5dec466b1254143f1e3fe08b062e1b0a
BLAKE2b-256 74856947899c12b8e8b66e253d781b3b622b2fa51bb77b663fdd8ce9bb765724

See more details on using hashes here.

File details

Details for the file zignal_processing-0.4.1-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for zignal_processing-0.4.1-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 f54f7cf63ae383b507d28a94dd9d32737aa3efb266fda1767ee6ae80b444c562
MD5 1c054d8853b1262ac2955c4a7c80dde6
BLAKE2b-256 18c70f0c75b42b4269e24e104ac5168ab0ac397981d4ecb2fa263e30abaca919

See more details on using hashes here.

File details

Details for the file zignal_processing-0.4.1-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for zignal_processing-0.4.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 344840da5d13ead445adffa967a325b25812cb0a14bc84497a9e3397e6df6e78
MD5 069683d3cb2603d9fe7d0b8afced5773
BLAKE2b-256 a162a9c685371cfce6793d6c9f9c7f4ff65ceea595b4e0188eb4f9f13aca88db

See more details on using hashes here.

File details

Details for the file zignal_processing-0.4.1-cp310-cp310-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for zignal_processing-0.4.1-cp310-cp310-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 0cc74875006f7355faebb164650693a74867d4d49fb6ad1b89c9b4240cb33953
MD5 fad6288e5d6e99fbb2a632d150ff9dbd
BLAKE2b-256 d16d7aa36f41eeaf61a7ca2e86853d24a027e68d78fa0ad1f234b96cb9ef46c2

See more details on using hashes here.

File details

Details for the file zignal_processing-0.4.1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zignal_processing-0.4.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d6690078afd2cec115b89da1477aa23c89c5d23e2fcc21d4d8d71015c455166a
MD5 625c6735f8872091a85e1976b6a2e96f
BLAKE2b-256 16695c9ff3d6bca8a9eab941ef682b7e9b7b8db22d35ce822c3a179520b7d9d2

See more details on using hashes here.

File details

Details for the file zignal_processing-0.4.1-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for zignal_processing-0.4.1-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 26e647bf0a994cf7aec08220d8b6341b3f1481f5b397e06e8e272132c446a649
MD5 66949b166f6f323367bca43e797fb180
BLAKE2b-256 b2bea56f2cec0a58da67997584de4cd81c54c690a00d6e6a105ea9a86afd0536

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