简单的颜色格式化和操作。

dev-master 2024-06-18 23:47 UTC

This package is auto-updated.

Last update: 2024-09-19 00:33:16 UTC


README

Packagist Build Status codecov

简单的颜色解析和操作库。轻量级,无依赖。能够自动解析常见的颜色字符串。无需使用不同类来处理各种支持的格式。

支持的字符串格式

  • RGB十六进制字符串 #FF0000
  • RGBA十六进制字符串 #FF0000FF
  • RGB CSS 字符串 rgb(255, 0, 0)
  • RGBA CSS 字符串 rgba(255, 0, 0, 1.0)
  • HSL CSS 字符串 hsl(255, 0, 0)
  • HSLA CSS 字符串 hsla(255, 0, 0, 1.0)
use Nether\Dye\Colour;

$Red = new Colour('#FF0000');
// ...

要求

  • PHP 8.1+

Nether\Dye\Colour

基本颜色对象,其中修改将混合到当前对象,并重新计算所有相关属性以保持当前状态。

Nether\Dye\ColourImmutable

Colour 具有相同的 API,但所有会修改当前数据集的方法都返回新对象,而保留原始对象不变。

工厂 API

Colour::From(string|RGBA|HSLA $Input): static

  • 从适合已知格式的字符串中解析输入颜色。

Colour::FromIntRGB(int $RGB): static

  • 从 24 位 RGB 整数解析输入颜色。

Colour::FromIntRGBA(int $RGB): static

  • 从 32 位 RGBA 整数解析输入颜色。

Colour::FromRGB(int $R, int $G, int $B, int|float $A=255): static

  • 按组件解析 RGB。

Colour::FromHSL(int $H, float $S, float $L, float $A=1.0): static

  • 按组件解析 HSL。

操作 API

设置组件

$Colour->SetRGB(?int $R, ?int $G, ?int $B, ?int $A): self

  • 设置指定的 RGB[A] 组件(不为 null)。

$Colour->SetHSL(?int $H, ?float $S, ?float $L, ?float $A): self

  • 设置指定的 HSL[A] 组件(不为 null)。

Shooping Around.

$Colour->HueRotate(int $Degrees): self

  • 按指定度数旋转颜色。

$Colour->HueShift(float $Percent): self

  • 按指定百分比偏移颜色。

$Colour->Saturation(float $Mult): self

  • 通过指定乘数修改颜色的饱和度。

$Colour->Saturate(float $Str): self

  • 通过指定强度增加饱和度。

$Colour->Desaturate(float $Str): self

  • 通过指定强度减少饱和度。

$Colour->Lightness(float $Mult): self

  • 通过指定乘数修改颜色的亮度。

$Colour->Lighten(float $Str): self

  • 通过指定强度增加亮度。

$Colour->Darken(float $Str): self

  • 通过指定强度减少亮度。

$Colour->Mix(Colour $With, float $Str=0.5): self

  • 以指定强度混合指定颜色。

查询 API

$Colour->IsBright(): bool

  • 如果颜色会被认为是明亮的,则返回 TRUE。

$Colour->IsDark(): bool

  • 如果颜色会被认为是暗的,则返回 TRUE。

打印 API

$Colour->ToHexRGB(): string

  • 返回类似于 #FF0000 的十六进制编码字符串。

$Colour->ToHexRGBA(): string

  • 返回类似于 #FF0000FF 的十六进制编码字符串。

$Colour->ToStyleRGB(): string

  • 返回类似于 rgb(255, 0, 0) 的字符串。

$Colour->ToStyleRGBA(): string

  • 返回类似于 rgb(255, 0, 0, 1.00) 的字符串。

$Colour->ToStyleHSL(): string

  • 返回类似于 hsl(0, 1.00, 0.50) 的字符串。

$Colour->ToStyleHSLA(): string

  • 返回一个类似于 hsl(0, 1.00, 0.50, 1.0) 的十六进制编码字符串

格式组件API

注意:所有操作都应通过根颜色对象的方法进行,以保持各种属性同步。SetRGB() 和 SetHSL() 方法接受可选的标签化参数和数组展开。

$Colour->RGB->ToArray(bool $Indexed=TRUE): array

  • 返回一个索引数组或RGB数据列表。

$Colour->RGB->R(): int

  • 返回RGB数据的红色分量。

$Colour->RGB->G(): int

  • 返回RGB数据的绿色分量。

$Colour->RGB->B(): int

  • 返回RGB数据的蓝色分量。

$Colour->RGB->A(): int

  • 返回RGB数据的Alpha分量。

$Colour->HSL->ToArray(bool $Indexed=TRUE): array

  • 返回一个索引数组或HSL数据列表。

$Colour->HSL->H(): int

  • 返回HSL数据的色调分量。

$Colour->HSL->S(): float

  • 返回HSL数据的饱和度分量。

$Colour->HSL->L(): float

  • 返回HSL数据的亮度分量。

$Colour->HSL->A(): float

  • 返回HSL数据的Alpha分量。

示例

实例化选择

use Nether\Dye\Colour;

// long form
$C1 = new Colour;
$C1->Import('#aabbcc');

// condensed form
$C2 = new Colour('#aabbcc');

// factory form
$C3 = Colour::From('#aabbcc');

不可变对象

use Nether\Dye\ColourImmutable;

$R = new ColourImmutable('#FF0000');
$G = $R->HueRotate(120);
$B = $G->HueRotate(120);

printf(
	'R: %s, G: %s, B: %s%s',
	$R->ToHexRGB(),
	$G->ToHexRGB(),
	$B->ToHexRGB(),
	PHP_EOL
);

// R: #FF0000, G: #00FF00, B: #0000FF

测试

$ phpunit

  • 运行单元测试套件。

$ php -S localhost:8080 -t wwwtest

  • 运行测试页面以查看一些内容。