ssnepenthe/color-utils

一个用于执行类似SASS的颜色操作的PHP库。

0.4.2 2017-06-19 16:48 UTC

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)

最后,hslargba函数也可以用来调整现有颜色的透明度

$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]) 的别名。