I'd like to convert a set of pixel values from one profiled colorspace to another, without these values residing in an image file, such as (say) a list of RGB/RGBA/CMYK/etc data structures.
I have Python and PIL at my disposal, but I'm interested in solutions in related environments if that's what it takes.
The latest PIL has very nice support for LittleCMS -- but no way to hand it anything other than a PIL image (or a legacy pyCMS object) for it to act upon.
As far as I can ascertain, the command-line tool
In order to use the current 2.3 version of Little CMS with Python, I translated
lcms2consts.py with the
h2py.py script that comes in the Python distribution. The script does not translate struct declarations, but the constants are enough to do basic color transformations with
lcms2 as a dynamic library.
This example transforms a single colour from double precision Lab to 8-bit sRGB using built-in profiles. Use
cmsOpenProfileFromFile(filename, 'r') instead for files.
import ctypes from ctypes import byref from lcms2consts import * lcms = ctypes.windll.lcms2 inprof = lcms.cmsCreateLab4Profile(0) outprof = lcms.cmsCreate_sRGBProfile() xform = lcms.cmsCreateTransform(inprof, TYPE_Lab_DBL, outprof, TYPE_RGB_8, INTENT_PERCEPTUAL, 0) lcms.cmsCloseProfile(inprof) lcms.cmsCloseProfile(outprof) DblTriplet = ctypes.c_double * 3 ByteTriplet = ctypes.c_ubyte * 3 inbuf = DblTriplet(60.1,20.2,0.5) outbuf = ByteTriplet() lcms.cmsDoTransform(xform, byref(inbuf), byref(outbuf), 1) print list(outbuf) lcms.cmsDeleteTransform(xform)