Imago is a simple C library for reading and writing images in many different image file formats.

Currently supported file formats:
  • PNG (requires libpng).
  • JPEG (requires libjpeg).
  • Targa: 24bit or 32bit, raw, or RLE compressed.
  • Portable PixMap (PPM), and Portable GreyMap (PGM).
  • Radiance shared exponent HDR (RGBE).
  • LBM: InterLeaved BitMap (ILBM), and Planar BitMap (PBM).


Copyright (C) 2011-2017 John Tsiombikas <>

You may freely use, modify and/or redistribute libimago, under the terms of the GNU Lesser General Public License (LGPL) version 3 (or at your option, any later version published by the Free Software Foundation). See COPYING and COPYING.LESSER for details.


Latest release:

Grab the source code from github:

Web site:

Usage example

Check out the example program under test/, and the heavily commented imago2.h header file, to find out how to use libimago.

The simplest way to load image data in RGBA 32bit is:

int width, height;
unsigned char *pixels = img_load_pixels("foo.png", &width, &height, IMG_FMT_RGBA32);

To load image data in the closest possible format to whatever is natively stored in each particular image file, use:

struct img_pixmap img;
img_load(&img, "foo.png");
/* use img.fmt to determine the actual pixel format we got */

There's also an optional interface for loading an image and creating an OpenGL texture out of it in a single call:

unsigned int texture = img_gltexture_load("foo.png");


To build and install imago2 on UNIX run:

make install

If you wish to avoid the libpng or libjpeg dependencies, you may disable support for these formats by passing --disable-png or --disable-jpeg to configure.

To build on windows try to open the included visual studio project. For this to work you will have to download and build any dependencies (libpng, zlib, and libjpeg), point the visual studio include/library paths to the correct directories, and call the old ones from the deep.

If the build succeeds, a usr hierarchy will have been created in the project. Feel free to run install.bat to copy it to C:\usr, to try and impose some semblance of sanity to the system.