我想将一组像素值从一个配置的Colorspace转换为另一个配置的Colorspace,而没有这些值位于图像文件中,例如(例如)RGB/RGBA/rgba/cmyk/etct and Data Data Structures的列表。

我有python和 pil 可以使用,但是如果需要的话,我对相关环境中的解决方案感兴趣。

最新的PIL对 littlecms - 但是除了pil图像(或旧版Pycms对象)以外,没有任何其他方法可以采取行动。

据我所知,命令行工具 icctrans LittleCms可以做到这一点,但是我似乎找不到任何非骨骼文档,并且该文档将其称为演示工具。

有帮助吗?

解决方案

为了使用当前2.3版本的 小CMS 我用python翻译了 lcms2.hlcms2consts.pyh2py.py Python发行中的脚本。该脚本不会翻译结构声明,但是常数足以进行基本的色彩转换 ctypeslcms2 作为动态库。

此示例使用内置配置文件将单个颜色从双精度实验室转换为8位SRGB。采用 cmsOpenProfileFromFile(filename, 'r') 而是用于文件。

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)

其他提示

有两种方法。

  • 骇客方法: 为了重塑n颜色结构(和/或在颜色空间之间转换它们),您可以创建一个1x(n+2)图像 PIL.Image.new(), , 采用 yourimage.load() 要获取一个像素设定对象接口,并将值(0,0)设置为(0,n)到您所获得的任何内容。将(0,n+1)设置为白色,(0,n+2)将黑色设置为黑色,并使用您喜欢的ICC文件进行映像(或验证转换)和 PIL.ImageCms.ImageCmsTransform(). 。 Blammo:那个PIL对象现在是您的LUT。阅读值 image.load() 东西,你很好。

  • 真实的方式: 您需要使用 Python-Colormath - 非常适合Colorspace变换,但不进行分析。 Colormath无法阅读ICC配置文件,因此a)您可以以可靠的方式解析其疯狂的二进制格式,或者b) 只是做数学, , 字面上地。这个家伙Bruce Lindbloom拥有所有以Excel格式可用的数据, 所有矩阵 您需要重新授予您的LUTS。他很棒。我仍在尝试将这些数据“仅”馈送到Colormath中,所以,是的,这使我不太出色,因为我仍在尝试将这种“书呆子”变成类似于生产品质的东西。

你去。到目前为止,这就是我为回答独立式ICC LUT转变的独立式问题的问题。你们,srsly。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top