aristath/ari-color

用于主题和插件中颜色操作的PHP库

资助包维护!
aristath

v1.1.2 2020-09-15 07:10 UTC

This package is auto-updated.

Last update: 2024-09-15 15:18:07 UTC


README

用于主题和插件中颜色操作的PHP库

Build Status codecov.io License

ariColor是一个PHP库,它可以帮助WordPress主题开发者更轻松、更有效地完成工作。

安装

composer require aristath/ari-color

它不提供你像lighten()darken()等的方法。相反,它通过提供所有颜色属性,并允许你根据需要操纵它们,让你能够以极大的便利性创建这些方法。

示例

首先,让我们创建我们的颜色对象

$color = ariColor::newColor( '#049CBE', 'hex' );

如果你不喜欢使用那种方法,你可以编写自己的代理函数

function my_custom_color_function( $color = '#ffffff' ) {
	return ariColor::newColor( $color, 'auto' );
}

注意,我们使用了auto作为模式。如果你使用auto或完全省略第二个参数,ariColor会为你自动检测。你可以使用rgbrgbahslhsla,甚至数组作为颜色。

然后你可以这样使用它

$color = my_custom_color_function( '#049CBE' );

比如说,你想获取红色、绿色、蓝色的值

// Get red value:
$red = $color->red;
// Get green value:
$green = $color->green;
// Get blue value
$blue = $color->blue;

或者你想获取你颜色的色调、饱和度、亮度或甚至是亮度值

// Get hue
$hue = $color->hue;
// Get saturation
$saturation = $color->saturation;
// Get lightness
$lightness = $color->lightness;
// Get luminance
$luminance = $color->luminance;

场景1

你有一个选项,用户可以为他们自己的<body>定义背景颜色。为了确保文本始终可读,你可以给他们第二个选项来设置文本颜色,或者自动计算它以提高可读性。

示例函数,给定一个背景颜色决定我们是否使用白色/黑色文本颜色

/**
 * determine the luminance of the given color
 * and then return #FFFFFF or #222222 so that our text is always readable
 * 
 * @param $background color string|array
 *
 * @return string (hex color)
 */
function custom_get_readable_color( $background_color = '#FFFFFF' ) {
	$color = ariColor::newColor( $background_color );
	return ( 127 < $color->luminance ) ? '#222222' : '#FFFFFF';
}

用法

$text_color = custom_get_readable_color( get_theme_mod( 'bg_color', '#ffffff' ) );

很简单,我们上面做的是检查背景颜色的亮度,然后如果亮度大于127,我们返回黑色,否则返回白色。

场景2

我们有一个HEX颜色,我们想要获取与rgba相同的颜色,透明度为0.7

function my_theme_get_semitransparent_color( $color ) {
	// Create the color object
	$color_obj = ariColor::newColor( $color );
	// Set alpha (opacity) to 0.7
	$color_obj->alpha = 0.7;
	// return a CSS-formated rgba color
	return $color_obj->toCSS( 'rgba' );
}

或者你可以这样简写

function my_theme_get_semitransparent_color( $color ) {
	$color_obj = ariColor::newColor( $color );
	return $color_obj->getNew( 'alpha', .7 )->toCSS( 'rgba' );
}

或者以同样的方式做同样的事情

function my_theme_get_semitransparent_color( $color ) {
	$color_obj = ariColor::newColor( $color );
	$color_new = ariColor::newColor( 'rgba(' . $color_obj->red . ',' . $color_obj->green . ',' . $color_obj->blue . ',0.7)', 'rgba' );
	return $color_new->->toCSS( 'rgba' );
}

选择权在你,你可以以任何方式操纵颜色。

属性列表

  • mode (字符串: hex/rgb/rgba/hsl/hsla)
  • red (红色值,整数,范围: 0-255)
  • green (绿色值,整数,范围: 0-255)
  • blue (蓝色值,整数,范围: 0-255)
  • alpha(alpha/透明度值,浮点数,范围 0-1)
  • hue (颜色色调,整数,范围 0-360)
  • saturation (颜色饱和度,整数,范围 0-100)
  • lightness (颜色亮度,整数,范围 0-100)
  • luminance(颜色亮度,整数,范围 0-255)
  • hex (当前颜色的十六进制值)

方法

  • newColor
  • getNew
  • toCSS

newColor

用于创建新对象。示例

$color = ariColor::newColor( 'rgba(0, 33, 176, .62)' );

newColor方法有两个参数

  1. $color: 可以接受任何颜色值(以下示例中说明)
  2. $mode: 颜色模式。如果未定义,将自动检测。

一些用于第一个参数的颜色格式示例

'black'
'darkmagenta'
'#000'
'#000000'
'rgb(0, 0, 0)'
'rgba(0, 0, 0, 1)'
'hsl(0, 0%, 0%)'
'hsla(0, 0%, 0%, 1)'
array( 'rgba' => 'rgba(0,0,0,1)' )
array( 'color' => '#000000' )
array( 'color' => '#000000', 'alpha' => 1 )
array( 'color' => '#000000', 'opacity' => '1' )
array( 0, 0, 0, 1 )
array( 0, 0, 0 )
array( 'r' => 0, 'g' => '0', 'b' => 0 )
array( 'r' => 0, 'g' => '0', 'b' => 0, 'a' => 1 )
array( 'red' => 0, 'green' => 0, 'blue' => 0 )
array( 'red' => 0, 'green' => 0, 'blue' => 0, 'alpha' => 1 )
array( 'red' => 0, 'green' => 0, 'blue' => 0, 'opacity' => 1 )

等等!这样你可以使用所有已知框架中保存的值。

getNew

如果我们要创建一个与现有对象相同的新对象,但改变其属性之一,则使用此方法。

getNew方法有两个参数

  1. $property: 可以接受上述列出的任何属性
  2. $value:属性的新的值。

示例 1:将颜色加深 10%

// Create a new object using rgba as our original color
$color = ariColor::newColor( 'rgba(0, 33, 176, .62)' );
// Darken the color by 10%
$dark = $color->getNew( 'lightness', $color->lightness - 10 );
// return HEX color
return $dark->toCSS( 'hex' );

或者,您可以将上述步骤合并,写得更简单一些

$color = ariColor::newColor( 'rgba(0, 33, 176, .62)' );
return $color->getNew( 'lightness', $color->lightness - 10 )->toCSS( 'hex' )

示例 2:从 HSL 颜色中移除所有绿色痕迹

// Create a new color object using an HSL color as source
$color = ariColor::newColor( 'hsl(200, 33%, 82%)' );
// I don't like green, color, let's remove any traces of green from that color
$new_color = $color->getNew( 'green', 0 );

toCSS

返回一个 CSS 格式的颜色值。

toCSS 有一个参数

  1. $mode:可以接受以下列出的任何值(如果未定义,默认为 hex
  • hex
  • rgb
  • rgba
  • hsl
  • hsla

示例

// Create our instance
$color = ariColor::newColor( 'hsl(200, 33%, 82%)' );
// Get HEX color
$hex = $color->toCSS( 'hex' );
// Get RGB color
$rgb = $color->toCSS( 'rgb' );
// Get RGBA color
$rgba = $color->toCSS( 'rgba' );
// Get HSL color
$hsl = $color->toCSS( 'hsl' );
// Get HSLA color
$hsla = $color->toCSS( 'hsla' );

颜色净化

所有颜色都在类内部进行净化,因此您可以轻松地编写一个代理函数,该函数将始终返回一个经过净化的颜色,如下所示

/**
 * Sanitizes a CSS color.
 * 
 * @param $color  string   accepts all CSS-valid color formats
 * @return        string   the sanitized color
 */
function custom_color_sanitize( $color = '' ) {
	// If empty, return empty
	if ( '' == $color ) {
		return '';
	}
	// If transparent, return 'transparent'
	if ( is_string( $color ) && 'transparent' == trim( $color ) ) {
		return 'transparent';
	}
	// Instantiate the object
	$color_obj = ariColor::newColor( $color );
	// Return a CSS value, using the auto-detected mode
	return $color_obj->toCSS( $color_obj->mode );
}

您甚至可以将此类函数用作自定义控制中的 sanitize_callback :)

测试

composer update --dev
./vendor/bin/phpunit