gpt4 book ai didi

python - 如何使用 ICC 配置文件对一组任意像素值(而不是图像数据结构)执行颜色变换?

转载 作者:太空狗 更新时间:2023-10-29 22:14:17 25 4
gpt4 key购买 nike

我想将一组像素值从一个配置的色彩空间转换到另一个,而不是这些值驻留在图像文件中,例如(比方说)RGB/RGBA/CMYK/等数据结构的列表。

我有 Python 和 PIL由我支配,但如果需要的话,我对相关环境中的解决方案很感兴趣。

最新的 PIL 对 LittleCMS 有很好的支持-- 但除了 PIL 图像(或遗留的 pyCMS 对象)之外,没有办法将其交给它以供其采取行动。

据我所知,LittleCMS 附带的命令行工具 icctrans 可以执行此类操作,但我似乎无法找到任何非骨架文档,并且文档将其称为演示工具。

最佳答案

为了使用当前的2.3版本Little CMS使用 Python,我使用 Python 发行版中的 h2py.py 脚本将 lcms2.h 翻译成 lcms2consts.py。该脚本不翻译结构声明,但常量足以使用 ctypeslcms2 作为动态库进行基本颜色转换。

此示例使用内置配置文件将单一颜色从 double Lab 转换为 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)

关于python - 如何使用 ICC 配置文件对一组任意像素值(而不是图像数据结构)执行颜色变换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3597528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com