Zig Image library
This is a work in progress library to create, process, read and write different image formats with Zig programming language.
Install & Build
This project assume current Zig master (0.11.0-dev.3879+5804f3f75 or higher) with stage2 self-hosted compiler.
Use zigimg in your project
How to add to your project:
As a submodule
- Clone this repository or add as a submodule
- Add to your
build.zig
exe.addAnonymousModule("zigimg", .{.source_file = .{ .path = "zigimg.zig" }});
Through the package manager
- Example build.zig.zon file
.{
.name = "app",
.version = "0.0.0",
.dependencies = .{
.zigimg = .{
.url = "https://github.com/zigimg/zigimg/archive/$REPLACE_WITH_WANTED_COMMIT$.tar.gz",
},
},
}
- When it fails to build due to a mismatched hash, add the
hash
line to the dependency
.zigimg = .{
.url = "https://github.com/zigimg/zigimg/archive/$REPLACE_WITH_WANTED_COMMIT$.tar.gz",
.hash = "$REPLACE_WITH_HASH_FROM_BUILD_ERROR$",
},
Test suite
To run the test suite, checkout the test suite and run
- Checkout zigimg
- Go back one folder and checkout the test suite
- Run the tests with
zig build
zig build test
Supported image formats
Image Format | Read | Write |
---|---|---|
ANIM | β | β |
BMP | βοΈ (Partial) | β |
GIF | β | β |
ICO | β | β |
IILBM | β | β |
JPEG | β | β |
PAM | β | β |
PBM | βοΈ | β |
PCX | βοΈ | β |
PGM | βοΈ (Partial) | βοΈ (Partial) |
PNG | βοΈ | βοΈ (Partial) |
PPM | βοΈ (Partial) | β |
QOI | βοΈ | βοΈ |
TGA | βοΈ | β |
TIFF | β | β |
XBM | β | β |
XPM | β | β |
BMP - Bitmap
- version 4 BMP
- version 5 BMP
- 24-bit RGB
- 32 RGBA
- Doesn't support any compression
PBM - Portable Bitmap format
- Everything is supported
PCX - ZSoft Picture Exchange format
- Support monochrome, 4 color, 16 color and 256 color indexed images
- Support 24-bit RGB images
PGM - Portable Graymap format
- Support 8-bit and 16-bit grayscale images
- 16-bit ascii grayscale loading not tested
PNG - Portable Network Graphics
- Support all pixel formats supported by PNG (grayscale, grayscale+alpha, indexed, truecolor, truecolor with alpha) in 8-bit or 16-bit.
- Support the mininal chunks in order to decode the image.
- Not all images in Png Test Suite is covered but should be good enough for now.
PPM - Portable Pixmap format
- Support 24-bit RGB (8-bit per channel)
- Missing 48-bit RGB (16-bit per channel)
QOI - Quite OK Image Format
- Imported from https://github.com/MasterQ32/zig-qoi with blessing of the author
TGA - Truevision TGA format
- Supports uncompressed and compressed 8-bit grayscale, indexed with 16-bit colormap, truecolor with 24-bit or 32-bit bit depth.
- Supports version 1 and version 2