専門外なので公式をPHPに書き換えただけですが、RGB値をもとに l*a*b* に変換することができます。
D50 や D65 というのは昼光色を基準として決められた標準イルミナント(標準となる光)で、
D50 は色温度 5000K を、D65 は 6500K をベースに定められています。
今回は Photoshop CS6 のカラーピッカーに近似する D50 を使い、変換を行いました。
直接 RGB から Lab には変換できないようなので、XYZ 表色系に変換してからそれを Lab にします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | <?php function xyz2lab( $xyz ) { $threshold = 0.008856; //Chromatic Adaptation Matrices // D50 $ref_x = 0.96422; $ref_y = 1.0000; $ref_z = 0.82521; // D65 /* $ref_x = 0.95047; $ref_y = 1.0000; $ref_z = 1.0883; */ $var_x = $xyz [0] / ( $ref_x * 100); $var_y = $xyz [1] / ( $ref_y * 100); $var_z = $xyz [2] / ( $ref_z * 100); $var_x = ( $var_x > $threshold ) ? $var_x = pow( $var_x , 1/3 ) : (7.787 * $var_x ) + (16 / 116); $var_y = ( $var_y > $threshold ) ? $var_y = pow( $var_y , 1/3 ) : (7.787 * $var_y ) + (16 / 116); $var_z = ( $var_z > $threshold ) ? $var_z = pow( $var_z , 1/3 ) : (7.787 * $var_z ) + (16 / 116); $l = ( 116 * $var_y ) - 16; $a = 500 * ( $var_x - $var_y ); $b = 200 * ( $var_y - $var_z ); $lab = array (); $lab = array ( $l , $a , $b ); return $lab ; } function rgb2xyz( $rgb ) { $r = $rgb [0] / 255; $g = $rgb [1] / 255; $b = $rgb [2] / 255; $r = ( $r > 0.04045) ? pow(( $r + 0.055) / 1.055, 2.4) : $r / 12.92; $g = ( $g > 0.04045) ? pow(( $g + 0.055) / 1.055, 2.4) : $g / 12.92; $b = ( $b > 0.04045) ? pow(( $b + 0.055) / 1.055, 2.4) : $b / 12.92; $r = $r * 100; $g = $g * 100; $b = $b * 100; $xyz = array (); //sRGB D50 $xyz [] = $r * 0.4360747 + $g * 0.3850649 + $b * 0.1430804; $xyz [] = $r * 0.2225045 + $g * 0.7168786 + $b * 0.0606169; $xyz [] = $r * 0.0139322 + $g * 0.0971045 + $b * 0.7141733; //sRGB D65 /* $xyz[] = $r * 0.4124564 + $g * 0.3575761 + $b * 0.1804375; $xyz[] = $r * 0.2126729 + $g * 0.7151522 + $b * 0.0721750; $xyz[] = $r * 0.0193339 + $g * 0.1191920 + $b * 0.9503041; */ return $xyz ; } function rgb2lab( $rgb ) { $xyz = rgb2xyz( $rgb ); $lab = xyz2lab( $xyz ); return $lab ; } //RGB値を 0~255 で指定する $rgb = array (244,46,32); var_dump( rgb2lab( $rgb ) ); |
参考
http://w3.kcua.ac.jp/~fujiwara/infosci/colorspace/
http://www.brucelindbloom.com/
Similar Posts:
- [PHP]似た画像を検索して近い順番に並べる(類似画像検索)
- Affinity Designer, Affinity Photo で実務レベルのウェブ制作は可能?
- [PHP]自然言語処理(形態素解析)を利用した簡易全文検索
- [PHP]2018年現在使っているおすすめの開発ツール・開発環境(Mac)
- [PHP]インスタンスが特定クラスのオブジェクトであるか調べる(型演算子)
- Adobe Creative Cloud 導入
- [PHP]トランプのブラックジャックを作る
- [PHP]var_dump()、print_r()などの内容をファイルに保存する