aristath / ari-color
用于主题和插件中颜色操作的PHP库
Requires
- php: >=5.2
Requires (Dev)
- composer/installers: ~1.0
- phpunit/phpunit: ~4.0
- satooshi/php-coveralls: ~2.2
This package is auto-updated.
Last update: 2024-09-15 15:18:07 UTC
README
用于主题和插件中颜色操作的PHP库
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
会为你自动检测。你可以使用rgb
、rgba
、hsl
、hsla
,甚至数组作为颜色。
然后你可以这样使用它
$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
方法有两个参数
$color
: 可以接受任何颜色值(以下示例中说明)$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
方法有两个参数
$property
: 可以接受上述列出的任何属性$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
有一个参数
$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