任意のピクセル値のセット(画像データ構造ではなく)でICCプロファイルを使用して色を実行するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/3597528

質問

Pixel値のセットを、RGB/RGBA/CMYK/などのデータ構造のリストなど、これらの値が画像ファイルに存在することなく、Pixel値のセットを別のカラースペースに変換したいと思います。

私はpythonを持っています ピル 私が自由に使えるのに、それが必要な場合は、関連する環境でのソリューションに興味があります。

最新のPILには非常に素晴らしいサポートがあります littlecms - しかし、それが行動するためのPILイメージ(またはレガシーPYCMSオブジェクト)以外のものを渡す方法はありません。

私が確認できる限り、コマンドラインツール icctrans LittleCMSにはこの種の何かが含まれていますが、骨格以外のドキュメントを見つけることはできないようで、ドキュメントはそれをデモンストレーションツールと呼んでいます。

役に立ちましたか?

解決

現在の2.3バージョンを使用するため リトルCMS Pythonで、翻訳しました lcms2.hlcms2consts.py とともに h2py.py Python Distributionにあるスクリプト。スクリプトは構造宣言を翻訳しませんが、定数は基本的な色変換を行うのに十分です 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)

他のヒント

2つの方法があります。

  • ハックウェイ: nカラー構造を再現する(および/または色の間でそれらを変換)するには、1x(n+2)画像を作成します PIL.Image.new(), 、 使用する yourimage.load() Pixel Setting Objectインターフェイスのものを取得し、(0、n)から(0、n)を取得したものに設定します。 (0、n+1)を白に、(0、n+2)を黒に設定し、お気に入りのICCファイルを使用してそのイメージを変換(または証明変換) PIL.ImageCms.ImageCmsTransform(). 。 Blammo:そのPILオブジェクトは今あなたのLUTです。で値を読み取ります image.load() 物事とあなたは元気です。

  • 真の方法: 使用する必要があります Python-Colormath - これは、カラースペースの変換に最適ですが、プロファイリングではありません。 ColormathはICCプロファイルを読み取ることができないため、a)信頼できる方法でクレイジーなバイナリ形式を解析するか、b) 数学をするだけです, 、 文字通り。この男のブルース・リンドブルームには、エクセル形式で利用可能なすべてのデータがあります。 すべてのマトリック あなたはあなたのlutsを再現する必要があります。彼は完全に素晴らしいです。私はまだこのデータをColormathに「ただ」しようとしているので、ええ、これはまだ「オタク」を生産品質に似たものにしようとしているので、私はそれほど素晴らしいものになりません。

そこに行きます。それが私がこれまでのところ、自立型のコマンドスタイルのICC LUT変換の質問に答えるためにしたことです。みんな、srsly。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top