ssnepenthe / color-utils
一个用于执行类似SASS的颜色操作的PHP库。
Requires
- php: >=7.0
Requires (Dev)
- phploc/phploc: ^3.0
- phpmd/phpmd: ^2.6
- phpunit/phpunit: ^6.0
- psy/psysh: ^0.8
- squizlabs/php_codesniffer: ^2.8
- vimeo/psalm: ^0.3
This package is auto-updated.
Last update: 2024-09-11 03:49:02 UTC
README
此包旨在提供多种类似SASS的颜色操作函数。
要求
Composer,PHP 7.0或更高版本。
安装
使用Composer安装
composer require ssnepenthe/color-utils
用法
所有列出的函数都在SSNepenthe\ColorUtils
命名空间内。
颜色表示
使用color
函数创建颜色对象
color(array $color)
$color
是一个包含$channel => $value
对的数组。有效的通道包括红色、绿色、蓝色、色调、饱和度和透明度。
color(['red' => 255, 'green' => 0, 'blue' => 51])
color(['hue' => 348, 'saturation' => 100, 'lightness' => 50, 'alpha' => 0.7])
color(string $color)
$color
是一个字符串,表示颜色,格式如下:
- 十六进制表示法:
'#f03'
或'#ff0033'
- 关键字表示法:
'white'
(在MDN上的有效关键字列表) - 功能hsl(a)表示法:
'hsl(348, 100%, 50%)'
或'hsla(348, 100%, 50%, 0.7)'
- 功能rgb(a)表示法:
'rgb(255, 0, 51)'
或'rgba(255, 0, 51, 0.7)'
color(int $red, int $green, int $blue, [float $alpha])
每个$red
、$green
和$blue
的取值范围是0-255,$alpha
的取值范围是0-1。
color(255, 0, 51)
color(255, 0, 51, 0.7)
color(float $hue, float $saturation, float $lightness, [float $alpha])
$hue
的取值范围是0-360,每个$saturation
和$lightness
的取值范围是0-100,$alpha
的取值范围是0-1。
color(348.0, 100.0, 50.0)
color(348.0, 100.0, 50.0, 0.7)
关于前面的两个例子
值255、0和51在技术上可以代表RGB值,也可以代表HSL值。在这种情况下,RGB优先于HSL。
如果您需要更精细的控制,请使用以下函数
hsl(float $hue, float $saturation, float $lightness)
hsla(float $hue, float $saturation, float $lightness, float $alpha)
rgb(int $red, int $green, int $blue)
rgba(int $red, int $green, int $blue, float $alpha)
最后,hsla
和rgba
函数也可以用来调整现有颜色的透明度
$hsl = hsl(348, 100, 50); echo $hsl; // 'hsl(348, 100%, 50%)' $hsla = hsla($hsl, 0.7); echo $hsla; // 'hsla(348, 100%, 50%, 0.7)'
颜色组件
可以通过以下函数访问单个颜色组件(每个函数都接受任何$color
参数,包括完整的颜色对象)
alpha($color)
获取颜色的alpha通道。
alpha('#f03'); // 1.0
blue($color)
获取颜色的blue通道。
blue('#f03'); // 51
brightness($color)
计算从0(黑色)到255(白色)的颜色亮度。
brightness('#f03') // 82.059
green($color)
获取颜色的green通道。
green('#f03'); // 0
hue($color)
获取颜色的hue通道。
hue('#f03'); // 348.0
is_bright($color)
接受一个可选的 $threshold
浮点数作为最后一个参数,默认为 127.5。检查 brightness($color) >= $threshold
。
is_bright('#f03'); // false
is_bright('#f03', 82); // true
is_light($color)
接受一个可选的 $threshold
浮点数作为最后一个参数,默认为 50.0。检查 lightness($color) >= $threshold
。
is_light('#f03'); // true
is_light('#f03', 55); // false
lightness($color)
获取颜色的亮度通道。
lightness('#f03'); // 50.0
looks_bright($color)
接受一个可选的 $threshold
浮点数作为最后一个参数,默认为 127.5。检查 perceived_brightness($color) >= $threshold
。
looks_bright('#f03'); // true
looks_bright('#f03', 141.0); // false
name($color)
获取颜色的名称(关键字)表示。如果没有找到,则返回空字符串。
name('#f03'); // ''
name('#00f'); // 'blue'
opacity($color)
是 alpha($color)
的别名。
perceived_brightness($color)
计算颜色在从 0(黑色)到 255(白色)的尺度上的感知亮度。
perceived_brightness('#f03'); // 140.49551
red($color)
获取颜色的红色通道。
red('#f03'); // 255
relative_luminance($color)
计算颜色在从 0(黑色)到 1(白色)的尺度上的相对亮度。
relative_luminance('#f03'); // 0.21499
saturation($color)
获取颜色的饱和度通道。
saturation('#f03'); // 100.0
颜色计算
以下函数计算两个给定颜色之间的差异
brightness_difference(Color $color1, Color $color2)
计算从 0 到 255 的亮度差异。
brightness_difference(color('red'), color('green')) // 1.109
color_difference(Color $color1, Color $color2)
计算从 0 到 765 的颜色差异。
color_difference(color('red'), color('green')) // 383
constrast_ratio(Color $color1, Color $color2)
计算两个颜色之间的对比度比,从 1 到 21。
contrast_ratio(color('red'), color('green')) // 1.28486
颜色变换
可以使用以下函数变换颜色(所有函数都接受任何 $color
参数,这些参数由 color
函数识别)
adjust_color($color, array $channels)
通过增加/减少 $color
的一个或多个通道值来创建一个新颜色。这可以改变红色、绿色、蓝色、色调、饱和度、亮度和 alpha 通道。 $channels
由 $channel => $amount
对的数组指定。
(string) adjust_color('rgb(50, 100, 150)', ['green' => 50, 'blue' => -50]); // 'rgb(50, 150, 100)'
change_color($color, array $channels)
通过更改 $color
的一个或多个通道值来创建一个新颜色。这可以改变红色、绿色、蓝色、色调、饱和度、亮度和 alpha 通道。 $channels
由 $channel => $amount
对的数组指定。
(string) change_color('rgb(50, 100, 150)', ['green' => 50, 'blue' => 25]); // 'rgb(50, 50, 25)'
invert($color)
通过反转(从 255 中减去)$color
的红色、绿色和蓝色通道来创建一个新颜色。alpha 通道保持不变。
(string) invert('rgb(50, 100, 150)'); // 'rgb(205, 155, 105)'
mix(Color $color1, Color $color2, int $weight = 50)
通过平均 $color1
和 $color2
的红色、绿色和蓝色通道来创建新的颜色,其中 $color1
可选地按 $weight
% 加权。同时考虑了透明度。与 SASS 使用相同的算法。[使用相同的算法](https://github.com/sass/sass/blob/stable/lib/sass/script/functions.rb#L1291)。
(string) mix(color('rgb(50, 100, 150)'), color('rgb(100, 100, 100))); // 'rgb(75, 100, 125)
(string) mix(color('rgb(50, 100, 150)'), color('rgb(100, 100, 100)'), 25); // 'rgb(88, 100, 113)
(string) mix(color('rgb(50, 100, 150)'), color('rgb(100, 100, 100)'), 75); // 'rgb(63, 100, 138)
scale_color($color, array $channels)
通过缩放 $color
的一个或多个通道值来创建新的颜色。这可以改变红色、绿色、蓝色、色调、饱和度、亮度和透明度通道。$channels
被指定为一个 $channel => $percent
的数组对,每个通道值按 $percent
% 的最大调整范围进行缩放。
在下面的示例中,绿色值为 100,我们想要正方向缩放 50%。允许的最大值是 255,这意味着最大可能的调整是 155。新的绿色值变为 100 + (155 * 0.5)。
同样,蓝色值为 150,我们想要负方向缩放 50%。允许的最小值是 0,这意味着最大可能的调整是 -150。新的蓝色值变为 150 + (-150 * 0.5)。
(string) scale_color('rgb(50, 100, 150)', ['green' => 50, 'blue' => -50]); // 'rgb(50, 178, 75)'
adjust_hue($color, float $degrees)
是 adjust_color($color, ['hue' => $degrees])
的别名。
complement($color)
是 adjust_color($color, ['hue' => 180])
的别名。
darken($color, float $amount)
是 adjust_color($color, ['lightness' => -1 * $amount])
的别名。
desaturate($color, float $amount)
是 adjust_color($color, ['saturation' => -1 * $amount])
的别名。
fade_in($color, float $amount)
是 opacify($color, $amount)
的别名。
fade_out($color, float $amount)
是 transparentize($color, $amount)
的别名。
grayscale($color)
是 change_color($color, ['saturation' => 0])
的别名。
lighten($color, float $amount)
是 adjust_color($color, ['lightness' => $amount])
的别名。
opacify($color, float $amount)
是 adjust_color($color, ['alpha' => $amount])
的别名。
saturate($color, float $amount)
是 adjust_color($color, ['saturation' => $amount])
的别名。
shade($color, int $weight = 50)
是 mix(color('black'), color($color), $weight)
的别名。
tint($color, int $weight = 50)
是 mix(color('white'), color($color), $weight)
的别名。
transparentize($color, float $amount)
是 adjust_color($color, ['alpha' => -1 * $amount])
的别名。