Signed-off-by: John Molakvoæ <skjnldsv@protonmail.com>
This commit is contained in:
John Molakvoæ 2022-04-26 07:57:39 +02:00
Родитель 8bcba22d77
Коммит 1f92440b79
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 60C25B8C072916CF
28 изменённых файлов: 12 добавлений и 1786 удалений

Просмотреть файл

@ -25,8 +25,7 @@
"ext-pdo": "*",
"ext-simplexml": "*",
"ext-xmlreader": "*",
"ext-zip": "*",
"mexitek/phpcolors": "^1.0"
"ext-zip": "*"
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.4"

60
composer.lock сгенерированный
Просмотреть файл

@ -4,62 +4,8 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "8f8b099365b3839a80b19e266c4ba5e4",
"packages": [
{
"name": "mexitek/phpcolors",
"version": "v1.0.4",
"source": {
"type": "git",
"url": "https://github.com/mexitek/phpColors.git",
"reference": "4043974240ca7dc3c2bec3c158588148b605b206"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/mexitek/phpColors/zipball/4043974240ca7dc3c2bec3c158588148b605b206",
"reference": "4043974240ca7dc3c2bec3c158588148b605b206",
"shasum": ""
},
"require": {
"php": "^7.2|^8.0"
},
"require-dev": {
"nette/tester": "^2.3",
"squizlabs/php_codesniffer": "^3.5"
},
"type": "library",
"autoload": {
"classmap": [
"src"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Arlo Carreon",
"homepage": "http://arlocarreon.com",
"role": "creator"
}
],
"description": "A series of methods that let you manipulate colors. Just incase you ever need different shades of one color on the fly.",
"homepage": "http://mexitek.github.com/phpColors/",
"keywords": [
"color",
"css",
"design",
"frontend",
"ui"
],
"support": {
"issues": "https://github.com/mexitek/phpColors/issues",
"source": "https://github.com/mexitek/phpColors"
},
"time": "2021-11-26T13:19:08+00:00"
}
],
"content-hash": "8333c8a239fe5ccec285dfbccc17cca4",
"packages": [],
"packages-dev": [
{
"name": "bamarni/composer-bin-plugin",
@ -130,5 +76,5 @@
"platform-overrides": {
"php": "7.4"
},
"plugin-api-version": "2.2.0"
"plugin-api-version": "2.3.0"
}

Просмотреть файл

@ -2,6 +2,11 @@
// autoload.php @generated by Composer
if (PHP_VERSION_ID < 50600) {
echo 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
exit(1);
}
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit53792487c5a8370acc0b06b1a864ff4c::getLoader();

Просмотреть файл

@ -7,7 +7,6 @@ $baseDir = dirname(dirname($vendorDir));
return array(
'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
'Mexitek\\PHPColors\\Color' => $vendorDir . '/mexitek/phpcolors/src/Mexitek/PHPColors/Color.php',
'OCP\\Accounts\\IAccount' => $baseDir . '/lib/public/Accounts/IAccount.php',
'OCP\\Accounts\\IAccountManager' => $baseDir . '/lib/public/Accounts/IAccountManager.php',
'OCP\\Accounts\\IAccountProperty' => $baseDir . '/lib/public/Accounts/IAccountProperty.php',

Просмотреть файл

@ -22,8 +22,6 @@ class ComposerAutoloaderInit53792487c5a8370acc0b06b1a864ff4c
return self::$loader;
}
require __DIR__ . '/platform_check.php';
spl_autoload_register(array('ComposerAutoloaderInit53792487c5a8370acc0b06b1a864ff4c', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
spl_autoload_unregister(array('ComposerAutoloaderInit53792487c5a8370acc0b06b1a864ff4c', 'loadClassLoader'));

Просмотреть файл

@ -36,7 +36,6 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
public static $classMap = array (
'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
'Mexitek\\PHPColors\\Color' => __DIR__ . '/..' . '/mexitek/phpcolors/src/Mexitek/PHPColors/Color.php',
'OCP\\Accounts\\IAccount' => __DIR__ . '/../../..' . '/lib/public/Accounts/IAccount.php',
'OCP\\Accounts\\IAccountManager' => __DIR__ . '/../../..' . '/lib/public/Accounts/IAccountManager.php',
'OCP\\Accounts\\IAccountProperty' => __DIR__ . '/../../..' . '/lib/public/Accounts/IAccountProperty.php',

Просмотреть файл

@ -1,62 +1,5 @@
{
"packages": [
{
"name": "mexitek/phpcolors",
"version": "v1.0.4",
"version_normalized": "1.0.4.0",
"source": {
"type": "git",
"url": "https://github.com/mexitek/phpColors.git",
"reference": "4043974240ca7dc3c2bec3c158588148b605b206"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/mexitek/phpColors/zipball/4043974240ca7dc3c2bec3c158588148b605b206",
"reference": "4043974240ca7dc3c2bec3c158588148b605b206",
"shasum": ""
},
"require": {
"php": "^7.2|^8.0"
},
"require-dev": {
"nette/tester": "^2.3",
"squizlabs/php_codesniffer": "^3.5"
},
"time": "2021-11-26T13:19:08+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
"classmap": [
"src"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Arlo Carreon",
"homepage": "http://arlocarreon.com",
"role": "creator"
}
],
"description": "A series of methods that let you manipulate colors. Just incase you ever need different shades of one color on the fly.",
"homepage": "http://mexitek.github.com/phpColors/",
"keywords": [
"color",
"css",
"design",
"frontend",
"ui"
],
"support": {
"issues": "https://github.com/mexitek/phpColors/issues",
"source": "https://github.com/mexitek/phpColors"
},
"install-path": "../mexitek/phpcolors"
}
],
"packages": [],
"dev": false,
"dev-package-names": []
}

Просмотреть файл

@ -5,7 +5,7 @@
'type' => 'library',
'install_path' => __DIR__ . '/../../../',
'aliases' => array(),
'reference' => '3e28052303a61b134b454fdc31e72d371c03b793',
'reference' => '4f4f8cea83a31519e55b6305c6d9471896de42be',
'name' => '__root__',
'dev' => false,
),
@ -16,16 +16,7 @@
'type' => 'library',
'install_path' => __DIR__ . '/../../../',
'aliases' => array(),
'reference' => '3e28052303a61b134b454fdc31e72d371c03b793',
'dev_requirement' => false,
),
'mexitek/phpcolors' => array(
'pretty_version' => 'v1.0.4',
'version' => '1.0.4.0',
'type' => 'library',
'install_path' => __DIR__ . '/../mexitek/phpcolors',
'aliases' => array(),
'reference' => '4043974240ca7dc3c2bec3c158588148b605b206',
'reference' => '4f4f8cea83a31519e55b6305c6d9471896de42be',
'dev_requirement' => false,
),
),

Просмотреть файл

@ -1,26 +0,0 @@
<?php
// platform_check.php @generated by Composer
$issues = array();
if (!(PHP_VERSION_ID >= 70200)) {
$issues[] = 'Your Composer dependencies require a PHP version ">= 7.2.0". You are running ' . PHP_VERSION . '.';
}
if ($issues) {
if (!headers_sent()) {
header('HTTP/1.1 500 Internal Server Error');
}
if (!ini_get('display_errors')) {
if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
} elseif (!headers_sent()) {
echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
}
}
trigger_error(
'Composer detected issues in your platform: ' . implode(' ', $issues),
E_USER_ERROR
);
}

Просмотреть файл

@ -1,17 +0,0 @@
# EditorConfig is awesome: http://EditorConfig.org
# top-most EditorConfig file
root = true
# Unix-style newlines with a newline ending every file
[*]
charset = utf-8
end_of_line = lf
indent_style = space
indent_size = 4
insert_final_newline = true
trim_trailing_whitespace = true
# .travis.yml
[.travis.yml]
indent_size = 2

5
lib/composer/mexitek/phpcolors/.gitignore поставляемый
Просмотреть файл

@ -1,5 +0,0 @@
*.bak
*.*.bak
vendor/*
composer.lock
.idea

Просмотреть файл

@ -1,10 +0,0 @@
<?xml version="1.0"?>
<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="PHPColors"
xsi:noNamespaceSchemaLocation="https://raw.githubusercontent.com/squizlabs/PHP_CodeSniffer/master/phpcs.xsd">
<description>The coding standard for PHPColors.</description>
<file>./src</file>
<file>./tests</file>
<rule ref="PSR12"/>
</ruleset>

Просмотреть файл

@ -1,11 +0,0 @@
language: php
php:
- 7.2
- 7.3
- 7.4
- 8.0
before_script:
- composer install --no-interaction --dev --prefer-source
script:
- vendor/bin/phpcs --extensions=php,phpt --warning-severity=0
- vendor/bin/tester tests -s -p php

Просмотреть файл

@ -1,21 +0,0 @@
MIT License
Copyright (c) 2020 Arlo Carreon, http://arlocarreon.com
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

Просмотреть файл

@ -1,173 +0,0 @@
# PHPColors [![Build Status](https://travis-ci.org/mexitek/phpColors.svg?branch=master)](https://travis-ci.org/mexitek/phpColors)
> A series of methods that let you manipulate colors. Just incase you ever need different shades of one color on the fly.
## Requirements
PHPColors requires PHP version 7.2.0 or greater.
## Installation
### Composer
Simply add `mexitek/phpcolors` to `composer.json` using `dev-master`.
```
composer require mexitek/phpcolors:dev-master
```
## How it works
Instantiate an object of the color class with a hex color string `$foo = new Color("336699")`. That's it! Now, call the methods you need for different color variants.
## Available Methods
- <strong>darken( [$amount] )</strong> : Allows you to obtain a darker shade of your color. Optionally you can decide to darken using a desired percentage.
- <strong>lighten( [$amount] )</strong> : Allows you to obtain a lighter shade of your color. Optionally you can decide to lighten using a desired percentage.
- <strong>mix($hex, [$amount] )</strong> : Allows you to mix another color to your color. Optionally you can decide to set the percent of second color or original color amount is ranged -100...0...100.
- <strong>isLight( [$hex] )</strong> : Determins whether your color (or the provide param) is considered a "light" color. Returns `TRUE` if color is light.
- <strong>isDark( [$hex] )</strong> : Determins whether your color (or the provide param) is considered a "dark" color. Returns `TRUE` if color is dark.
- <strong>makeGradient( [$amount] )</strong> : Returns an array with 2 indices `light` and `dark`, the initial color will either be selected for `light` or `dark` depending on its brightness, then the other color will be generated. The optional param allows for a static lighten or darkened amount.
- <strong>complementary()</strong> : Returns the color "opposite" or complementary to your color.
- <strong>getHex()</strong> : Returns the original hex color.
- <strong>getHsl()</strong> : Returns HSL array for your color.
- <strong>getRgb()</strong> : Returns RGB array for your color.
> Auto lightens/darkens by 10% for sexily-subtle gradients
```php
/**
* Using The Class
*/
use Mexitek\PHPColors\Color;
// Initialize my color
$myBlue = new Color("#336699");
echo $myBlue->darken();
// 1a334d
echo $myBlue->lighten();
// 8cb3d9
echo $myBlue->isLight();
// false
echo $myBlue->isDark();
// true
echo $myBlue->complementary();
// 996633
echo $myBlue->getHex();
// 336699
print_r( $myBlue->getHsl() );
// array( "H"=> 210, "S"=> 0.5, "L"=>0.4 );
print_r( $myBlue->getRgb() );
// array( "R"=> 51, "G"=> 102, "B"=>153 );
print_r($myBlue->makeGradient());
// array( "light"=>"8cb3d9" ,"dark"=>"336699" )
```
## Static Methods
- <strong>hslToHex( $hsl )</strong> : Convert a HSL array to a HEX string.
- <strong>hexToHsl( $hex )</strong> : Convert a HEX string into an HSL array.
- <strong>hexToRgb( $hex )</strong> : Convert a HEX string into an RGB array.
- <strong>rgbToHex( $rgb )</strong> : Convert an RGB array into a HEX string.
```php
/**
* On The Fly Custom Calculations
*/
use Mexitek\PHPColors\Color;
// Convert my HEX
$myBlue = Color::hexToHsl("#336699");
// Get crazy with the HUE
$myBlue["H"] = 295;
// Gimme my new color!!
echo Color::hslToHex($myBlue);
// 913399
```
## CSS Helpers
- <strong>getCssGradient( [$amount] [, $vintageBrowsers] )</strong> : Generates the CSS3 gradients for safari, chrome, opera, firefox and IE10. Optional percentage amount for lighter/darker shade. Optional boolean for older gradient CSS support.
> Would like to add support to custom gradient stops
```php
use Mexitek\PHPColors\Color;
// Initialize my color
$myBlue = new Color("#336699");
// Get CSS
echo $myBlue->getCssGradient();
/* - Actual output doesn't have comments and is single line
// fallback background
background: #336699;
// IE Browsers
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#8cb3d9', endColorstr='#336699');
// Safari 5.1+, Mobile Safari, Chrome 10+
background-image: -webkit-linear-gradient(top, #8cb3d9, #336699);
// Standards
background-image: linear-gradient(to bottom, #8cb3d9, #336699);
*/
```
However, if you want to support the ancient browsers (which has negligible market share and almost died out), you can set the second parameter to `TRUE`. This will output:
```php
use Mexitek\PHPColors\Color;
$myBlue = new Color("#336699");
// Get CSS
echo $myBlue->getCssGradient(10, TRUE);
/* - Actual output doesn't have comments and is single line
background: #336699; // fallback background
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#8cb3d9', endColorstr='#336699'); // IE Browsers
background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#8cb3d9), to(#336699)); // Safari 4+, Chrome 1-9
background-image: -webkit-linear-gradient(top, #8cb3d9, #336699); // Safari 5.1+, Mobile Safari, Chrome 10+
background-image: -moz-linear-gradient(top, #8cb3d9, #336699); // Firefox 3.6+
background-image: -o-linear-gradient(top, #8cb3d9, #336699); // Opera 11.10+
background-image: linear-gradient(to bottom, #8cb3d9, #336699); // Standards
*/
```
## Github Contributors
- mexitek
- danielpataki
- alexmglover
- intuxicated
- pborreli
- curtisgibby
- matthewpatterson
- there4
- alex-humphreys
- zaher
- primozcigler
- thedavidmeister
- tylercd100
- Braunson
# License
See LICENSE file or [arlo.mit-license.org](http://arlo.mit-license.org)

Просмотреть файл

@ -1,37 +0,0 @@
{
"name": "mexitek/phpcolors",
"description": "A series of methods that let you manipulate colors. Just incase you ever need different shades of one color on the fly.",
"type": "library",
"keywords": [
"color",
"ui",
"css",
"frontend",
"design"
],
"homepage": "http://mexitek.github.com/phpColors/",
"license": "MIT",
"authors": [
{
"name": "Arlo Carreon",
"homepage": "http://arlocarreon.com",
"role": "creator"
}
],
"support": {
"issues": "https://github.com/mexitek/phpColors/issues",
"source": "https://github.com/mexitek/phpColors"
},
"require": {
"php": "^7.2|^8.0"
},
"require-dev": {
"nette/tester": "^2.3",
"squizlabs/php_codesniffer": "^3.5"
},
"autoload": {
"classmap": [
"src"
]
}
}

Просмотреть файл

@ -1,94 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<title>phpColors Demo</title>
<?php
require_once __DIR__ . '/../src/Mexitek/PHPColors/Color.php';
use Mexitek\PHPColors\Color;
// Use different colors to test
$myBlue = new Color("#336699");
$myBlack = new Color("#333");
$myPurple = new Color("#913399");
$myVintage = new Color("#bada55");
// ************** No Need to Change Below **********************
?>
<style>
.block {
height: 100px;
width: 200px;
font-size: 20px;
text-align: center;
padding-top: 100px;
display: block;
margin: 0;
float: left;
}
.wide-block {
width: 360px;
padding-top: 70px;
padding-left: 20px;
padding-right: 20px;
margin-top: 10px;
}
.clear {
clear: both;
}
.testDiv {
<?= $myBlue->getCssGradient()?>
color: <?=($myBlue->isDark() ? "#EEE":"#333")?>;
}
.testDiv.plain {
background: #<?= $myBlue->getHex()?>;
color: <?=($myBlue->isDark() ? "#EEE":"#333")?>;
}
.testDiv2 {
<?= $myBlack->getCssGradient()?>
color: <?=($myBlack->isDark() ? "#EEE":"#333")?>;
}
.testDiv2.plain {
background: #<?= $myBlack->getHex();?>;
color: <?=($myBlack->isDark() ? "#EEE":"#333")?>;
}
.testDiv3 {
<?= $myPurple->getCssGradient()?>
color: <?=($myPurple->isDark() ? "#EEE":"#333")?>;
}
.testDiv3.plain {
background: #<?= $myPurple->getHex()?>;
color: <?=($myPurple->isDark() ? "#EEE":"#333")?>;
}
.testDiv4 {
<?= $myVintage->getCssGradient(30, true)?>
color: <?=($myVintage->isDark() ? "#EEE":"#333")?>;
}
</style>
</head>
<body>
<div class="clear"></div>
<div class="block testDiv">phpColor Gradient #<?= $myBlue->getHex() ?></div>
<div class="block testDiv plain">Plain #<?= $myBlue->getHex() ?></div>
<div class="clear"></div>
<div class="block testDiv2">phpColor Gradient #<?= $myBlack->getHex() ?></div>
<div class="block testDiv2 plain">Plain #<?= $myBlack->getHex() ?></div>
<div class="clear"></div>
<div class="block testDiv3">phpColor Gradient #<?= $myPurple->getHex() ?></div>
<div class="block testDiv3 plain">Plain #<?= $myPurple->getHex() ?></div>
<div class="clear"></div>
<div class="block wide-block testDiv4">
phpColor Gradient with vintage browsers support #<?= $myVintage->getHex() ?>
</div>
</body>
</html>

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 27 KiB

Просмотреть файл

@ -1,801 +0,0 @@
<?php
/**
* Author: Arlo Carreon <http://arlocarreon.com>
* Info: http://mexitek.github.io/phpColors/
* License: http://arlo.mit-license.org/
*/
namespace Mexitek\PHPColors;
use Exception;
/**
* A color utility that helps manipulate HEX colors
*/
class Color
{
/**
* @var string
*/
private $_hex;
/**
* @var array
*/
private $_hsl;
/**
* @var array
*/
private $_rgb;
/**
* Auto darkens/lightens by 10% for sexily-subtle gradients.
* Set this to FALSE to adjust automatic shade to be between given color
* and black (for darken) or white (for lighten)
*/
public const DEFAULT_ADJUST = 10;
/**
* Instantiates the class with a HEX value
* @param string $hex
* @throws Exception
*/
public function __construct(string $hex)
{
$color = self::sanitizeHex($hex);
$this->_hex = $color;
$this->_hsl = self::hexToHsl($color);
$this->_rgb = self::hexToRgb($color);
}
/**
* Given a HEX string returns a HSL array equivalent.
* @param string $color
* @return array HSL associative array
* @throws Exception
*/
public static function hexToHsl(string $color): array
{
// Sanity check
$color = self::sanitizeHex($color);
// Convert HEX to DEC
$R = hexdec($color[0] . $color[1]);
$G = hexdec($color[2] . $color[3]);
$B = hexdec($color[4] . $color[5]);
$HSL = array();
$var_R = ($R / 255);
$var_G = ($G / 255);
$var_B = ($B / 255);
$var_Min = min($var_R, $var_G, $var_B);
$var_Max = max($var_R, $var_G, $var_B);
$del_Max = $var_Max - $var_Min;
$L = ($var_Max + $var_Min) / 2;
if ($del_Max == 0) {
$H = 0;
$S = 0;
} else {
if ($L < 0.5) {
$S = $del_Max / ($var_Max + $var_Min);
} else {
$S = $del_Max / (2 - $var_Max - $var_Min);
}
$del_R = ((($var_Max - $var_R) / 6) + ($del_Max / 2)) / $del_Max;
$del_G = ((($var_Max - $var_G) / 6) + ($del_Max / 2)) / $del_Max;
$del_B = ((($var_Max - $var_B) / 6) + ($del_Max / 2)) / $del_Max;
if ($var_R == $var_Max) {
$H = $del_B - $del_G;
} elseif ($var_G == $var_Max) {
$H = (1 / 3) + $del_R - $del_B;
} elseif ($var_B == $var_Max) {
$H = (2 / 3) + $del_G - $del_R;
}
if ($H < 0) {
$H++;
}
if ($H > 1) {
$H--;
}
}
$HSL['H'] = ($H * 360);
$HSL['S'] = $S;
$HSL['L'] = $L;
return $HSL;
}
/**
* Given a HSL associative array returns the equivalent HEX string
* @param array $hsl
* @return string HEX string
* @throws Exception "Bad HSL Array"
*/
public static function hslToHex(array $hsl = array()): string
{
// Make sure it's HSL
if (empty($hsl) || !isset($hsl["H"], $hsl["S"], $hsl["L"])) {
throw new Exception("Param was not an HSL array");
}
list($H, $S, $L) = array($hsl['H'] / 360, $hsl['S'], $hsl['L']);
if ($S == 0) {
$r = $L * 255;
$g = $L * 255;
$b = $L * 255;
} else {
if ($L < 0.5) {
$var_2 = $L * (1 + $S);
} else {
$var_2 = ($L + $S) - ($S * $L);
}
$var_1 = 2 * $L - $var_2;
$r = 255 * self::hueToRgb($var_1, $var_2, $H + (1 / 3));
$g = 255 * self::hueToRgb($var_1, $var_2, $H);
$b = 255 * self::hueToRgb($var_1, $var_2, $H - (1 / 3));
}
// Convert to hex
$r = dechex(round($r));
$g = dechex(round($g));
$b = dechex(round($b));
// Make sure we get 2 digits for decimals
$r = (strlen("" . $r) === 1) ? "0" . $r : $r;
$g = (strlen("" . $g) === 1) ? "0" . $g : $g;
$b = (strlen("" . $b) === 1) ? "0" . $b : $b;
return $r . $g . $b;
}
/**
* Given a HEX string returns a RGB array equivalent.
* @param string $color
* @return array RGB associative array
* @throws Exception
*/
public static function hexToRgb(string $color): array
{
// Sanity check
$color = self::sanitizeHex($color);
// Convert HEX to DEC
$R = hexdec($color[0] . $color[1]);
$G = hexdec($color[2] . $color[3]);
$B = hexdec($color[4] . $color[5]);
$RGB['R'] = $R;
$RGB['G'] = $G;
$RGB['B'] = $B;
return $RGB;
}
/**
* Given an RGB associative array returns the equivalent HEX string
* @param array $rgb
* @return string Hex string
* @throws Exception "Bad RGB Array"
*/
public static function rgbToHex(array $rgb = array()): string
{
// Make sure it's RGB
if (empty($rgb) || !isset($rgb["R"], $rgb["G"], $rgb["B"])) {
throw new Exception("Param was not an RGB array");
}
// https://github.com/mexitek/phpColors/issues/25#issuecomment-88354815
// Convert RGB to HEX
$hex[0] = str_pad(dechex((int)$rgb['R']), 2, '0', STR_PAD_LEFT);
$hex[1] = str_pad(dechex((int)$rgb['G']), 2, '0', STR_PAD_LEFT);
$hex[2] = str_pad(dechex((int)$rgb['B']), 2, '0', STR_PAD_LEFT);
// Make sure that 2 digits are allocated to each color.
$hex[0] = (strlen($hex[0]) === 1) ? '0' . $hex[0] : $hex[0];
$hex[1] = (strlen($hex[1]) === 1) ? '0' . $hex[1] : $hex[1];
$hex[2] = (strlen($hex[2]) === 1) ? '0' . $hex[2] : $hex[2];
return implode('', $hex);
}
/**
* Given an RGB associative array, returns CSS string output.
* @param array $rgb
* @return string rgb(r,g,b) string
* @throws Exception "Bad RGB Array"
*/
public static function rgbToString(array $rgb = array()): string
{
// Make sure it's RGB
if (empty($rgb) || !isset($rgb["R"], $rgb["G"], $rgb["B"])) {
throw new Exception("Param was not an RGB array");
}
return 'rgb(' .
$rgb['R'] . ', ' .
$rgb['G'] . ', ' .
$rgb['B'] . ')';
}
/**
* Given a standard color name, return hex code
*
* @param string $color_name
* @return string
*/
public static function nameToHex(string $color_name): string
{
$colors = array(
'aliceblue' => 'F0F8FF',
'antiquewhite' => 'FAEBD7',
'aqua' => '00FFFF',
'aquamarine' => '7FFFD4',
'azure' => 'F0FFFF',
'beige' => 'F5F5DC',
'bisque' => 'FFE4C4',
'black' => '000000',
'blanchedalmond' => 'FFEBCD',
'blue' => '0000FF',
'blueviolet' => '8A2BE2',
'brown' => 'A52A2A',
'burlywood' => 'DEB887',
'cadetblue' => '5F9EA0',
'chartreuse' => '7FFF00',
'chocolate' => 'D2691E',
'coral' => 'FF7F50',
'cornflowerblue' => '6495ED',
'cornsilk' => 'FFF8DC',
'crimson' => 'DC143C',
'cyan' => '00FFFF',
'darkblue' => '00008B',
'darkcyan' => '008B8B',
'darkgoldenrod' => 'B8860B',
'darkgray' => 'A9A9A9',
'darkgreen' => '006400',
'darkgrey' => 'A9A9A9',
'darkkhaki' => 'BDB76B',
'darkmagenta' => '8B008B',
'darkolivegreen' => '556B2F',
'darkorange' => 'FF8C00',
'darkorchid' => '9932CC',
'darkred' => '8B0000',
'darksalmon' => 'E9967A',
'darkseagreen' => '8FBC8F',
'darkslateblue' => '483D8B',
'darkslategray' => '2F4F4F',
'darkslategrey' => '2F4F4F',
'darkturquoise' => '00CED1',
'darkviolet' => '9400D3',
'deeppink' => 'FF1493',
'deepskyblue' => '00BFFF',
'dimgray' => '696969',
'dimgrey' => '696969',
'dodgerblue' => '1E90FF',
'firebrick' => 'B22222',
'floralwhite' => 'FFFAF0',
'forestgreen' => '228B22',
'fuchsia' => 'FF00FF',
'gainsboro' => 'DCDCDC',
'ghostwhite' => 'F8F8FF',
'gold' => 'FFD700',
'goldenrod' => 'DAA520',
'gray' => '808080',
'green' => '008000',
'greenyellow' => 'ADFF2F',
'grey' => '808080',
'honeydew' => 'F0FFF0',
'hotpink' => 'FF69B4',
'indianred' => 'CD5C5C',
'indigo' => '4B0082',
'ivory' => 'FFFFF0',
'khaki' => 'F0E68C',
'lavender' => 'E6E6FA',
'lavenderblush' => 'FFF0F5',
'lawngreen' => '7CFC00',
'lemonchiffon' => 'FFFACD',
'lightblue' => 'ADD8E6',
'lightcoral' => 'F08080',
'lightcyan' => 'E0FFFF',
'lightgoldenrodyellow' => 'FAFAD2',
'lightgray' => 'D3D3D3',
'lightgreen' => '90EE90',
'lightgrey' => 'D3D3D3',
'lightpink' => 'FFB6C1',
'lightsalmon' => 'FFA07A',
'lightseagreen' => '20B2AA',
'lightskyblue' => '87CEFA',
'lightslategray' => '778899',
'lightslategrey' => '778899',
'lightsteelblue' => 'B0C4DE',
'lightyellow' => 'FFFFE0',
'lime' => '00FF00',
'limegreen' => '32CD32',
'linen' => 'FAF0E6',
'magenta' => 'FF00FF',
'maroon' => '800000',
'mediumaquamarine' => '66CDAA',
'mediumblue' => '0000CD',
'mediumorchid' => 'BA55D3',
'mediumpurple' => '9370D0',
'mediumseagreen' => '3CB371',
'mediumslateblue' => '7B68EE',
'mediumspringgreen' => '00FA9A',
'mediumturquoise' => '48D1CC',
'mediumvioletred' => 'C71585',
'midnightblue' => '191970',
'mintcream' => 'F5FFFA',
'mistyrose' => 'FFE4E1',
'moccasin' => 'FFE4B5',
'navajowhite' => 'FFDEAD',
'navy' => '000080',
'oldlace' => 'FDF5E6',
'olive' => '808000',
'olivedrab' => '6B8E23',
'orange' => 'FFA500',
'orangered' => 'FF4500',
'orchid' => 'DA70D6',
'palegoldenrod' => 'EEE8AA',
'palegreen' => '98FB98',
'paleturquoise' => 'AFEEEE',
'palevioletred' => 'DB7093',
'papayawhip' => 'FFEFD5',
'peachpuff' => 'FFDAB9',
'peru' => 'CD853F',
'pink' => 'FFC0CB',
'plum' => 'DDA0DD',
'powderblue' => 'B0E0E6',
'purple' => '800080',
'red' => 'FF0000',
'rosybrown' => 'BC8F8F',
'royalblue' => '4169E1',
'saddlebrown' => '8B4513',
'salmon' => 'FA8072',
'sandybrown' => 'F4A460',
'seagreen' => '2E8B57',
'seashell' => 'FFF5EE',
'sienna' => 'A0522D',
'silver' => 'C0C0C0',
'skyblue' => '87CEEB',
'slateblue' => '6A5ACD',
'slategray' => '708090',
'slategrey' => '708090',
'snow' => 'FFFAFA',
'springgreen' => '00FF7F',
'steelblue' => '4682B4',
'tan' => 'D2B48C',
'teal' => '008080',
'thistle' => 'D8BFD8',
'tomato' => 'FF6347',
'turquoise' => '40E0D0',
'violet' => 'EE82EE',
'wheat' => 'F5DEB3',
'white' => 'FFFFFF',
'whitesmoke' => 'F5F5F5',
'yellow' => 'FFFF00',
'yellowgreen' => '9ACD32'
);
$color_name = strtolower($color_name);
if (isset($colors[$color_name])) {
return '#' . $colors[$color_name];
}
return $color_name;
}
/**
* Given a HEX value, returns a darker color. If no desired amount provided, then the color halfway between
* given HEX and black will be returned.
* @param int $amount
* @return string Darker HEX value
* @throws Exception
*/
public function darken(int $amount = self::DEFAULT_ADJUST): string
{
// Darken
$darkerHSL = $this->darkenHsl($this->_hsl, $amount);
// Return as HEX
return self::hslToHex($darkerHSL);
}
/**
* Given a HEX value, returns a lighter color. If no desired amount provided, then the color halfway between
* given HEX and white will be returned.
* @param int $amount
* @return string Lighter HEX value
* @throws Exception
*/
public function lighten(int $amount = self::DEFAULT_ADJUST): string
{
// Lighten
$lighterHSL = $this->lightenHsl($this->_hsl, $amount);
// Return as HEX
return self::hslToHex($lighterHSL);
}
/**
* Given a HEX value, returns a mixed color. If no desired amount provided, then the color mixed by this ratio
* @param string $hex2 Secondary HEX value to mix with
* @param int $amount = -100..0..+100
* @return string mixed HEX value
* @throws Exception
*/
public function mix(string $hex2, int $amount = 0): string
{
$rgb2 = self::hexToRgb($hex2);
$mixed = $this->mixRgb($this->_rgb, $rgb2, $amount);
// Return as HEX
return self::rgbToHex($mixed);
}
/**
* Creates an array with two shades that can be used to make a gradient
* @param int $amount Optional percentage amount you want your contrast color
* @return array An array with a 'light' and 'dark' index
* @throws Exception
*/
public function makeGradient(int $amount = self::DEFAULT_ADJUST): array
{
// Decide which color needs to be made
if ($this->isLight()) {
$lightColor = $this->_hex;
$darkColor = $this->darken($amount);
} else {
$lightColor = $this->lighten($amount);
$darkColor = $this->_hex;
}
// Return our gradient array
return array("light" => $lightColor, "dark" => $darkColor);
}
/**
* Returns whether or not given color is considered "light"
* @param string|bool $color
* @param int $lighterThan
* @return boolean
*/
public function isLight($color = false, int $lighterThan = 130): bool
{
// Get our color
$color = ($color) ? $color : $this->_hex;
// Calculate straight from rbg
$r = hexdec($color[0] . $color[1]);
$g = hexdec($color[2] . $color[3]);
$b = hexdec($color[4] . $color[5]);
return (($r * 299 + $g * 587 + $b * 114) / 1000 > $lighterThan);
}
/**
* Returns whether or not a given color is considered "dark"
* @param string|bool $color
* @param int $darkerThan
* @return boolean
*/
public function isDark($color = false, int $darkerThan = 130): bool
{
// Get our color
$color = ($color) ? $color : $this->_hex;
// Calculate straight from rbg
$r = hexdec($color[0] . $color[1]);
$g = hexdec($color[2] . $color[3]);
$b = hexdec($color[4] . $color[5]);
return (($r * 299 + $g * 587 + $b * 114) / 1000 <= $darkerThan);
}
/**
* Returns the complimentary color
* @return string Complementary hex color
* @throws Exception
*/
public function complementary(): string
{
// Get our HSL
$hsl = $this->_hsl;
// Adjust Hue 180 degrees
$hsl['H'] += ($hsl['H'] > 180) ? -180 : 180;
// Return the new value in HEX
return self::hslToHex($hsl);
}
/**
* Returns the HSL array of your color
*/
public function getHsl(): array
{
return $this->_hsl;
}
/**
* Returns your original color
*/
public function getHex(): string
{
return $this->_hex;
}
/**
* Returns the RGB array of your color
*/
public function getRgb(): array
{
return $this->_rgb;
}
/**
* Returns the cross browser CSS3 gradient
* @param int $amount Optional: percentage amount to light/darken the gradient
* @param boolean $vintageBrowsers Optional: include vendor prefixes for browsers that almost died out already
* @param string $prefix Optional: prefix for every lines
* @param string $suffix Optional: suffix for every lines
* @return string CSS3 gradient for chrome, safari, firefox, opera and IE10
* @throws Exception
* @link http://caniuse.com/css-gradients Resource for the browser support
*/
public function getCssGradient($amount = self::DEFAULT_ADJUST, $vintageBrowsers = false, $suffix = "", $prefix = ""): string
{
// Get the recommended gradient
$g = $this->makeGradient($amount);
$css = "";
/* fallback/image non-cover color */
$css .= "{$prefix}background-color: #" . $this->_hex . ";{$suffix}";
/* IE Browsers */
$css .= "{$prefix}filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#" . $g['light'] . "', endColorstr='#" . $g['dark'] . "');{$suffix}";
/* Safari 4+, Chrome 1-9 */
if ($vintageBrowsers) {
$css .= "{$prefix}background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#" . $g['light'] . "), to(#" . $g['dark'] . "));{$suffix}";
}
/* Safari 5.1+, Mobile Safari, Chrome 10+ */
$css .= "{$prefix}background-image: -webkit-linear-gradient(top, #" . $g['light'] . ", #" . $g['dark'] . ");{$suffix}";
if ($vintageBrowsers) {
/* Firefox 3.6+ */
$css .= "{$prefix}background-image: -moz-linear-gradient(top, #" . $g['light'] . ", #" . $g['dark'] . ");{$suffix}";
/* Opera 11.10+ */
$css .= "{$prefix}background-image: -o-linear-gradient(top, #" . $g['light'] . ", #" . $g['dark'] . ");{$suffix}";
}
/* Unprefixed version (standards): FF 16+, IE10+, Chrome 26+, Safari 7+, Opera 12.1+ */
$css .= "{$prefix}background-image: linear-gradient(to bottom, #" . $g['light'] . ", #" . $g['dark'] . ");{$suffix}";
// Return our CSS
return $css;
}
/**
* Darkens a given HSL array
* @param array $hsl
* @param int $amount
* @return array $hsl
*/
private function darkenHsl(array $hsl, int $amount = self::DEFAULT_ADJUST): array
{
// Check if we were provided a number
if ($amount) {
$hsl['L'] = ($hsl['L'] * 100) - $amount;
$hsl['L'] = ($hsl['L'] < 0) ? 0 : $hsl['L'] / 100;
} else {
// We need to find out how much to darken
$hsl['L'] /= 2;
}
return $hsl;
}
/**
* Lightens a given HSL array
* @param array $hsl
* @param int $amount
* @return array
*/
private function lightenHsl(array $hsl, int $amount = self::DEFAULT_ADJUST): array
{
// Check if we were provided a number
if ($amount) {
$hsl['L'] = ($hsl['L'] * 100) + $amount;
$hsl['L'] = ($hsl['L'] > 100) ? 1 : $hsl['L'] / 100;
} else {
// We need to find out how much to lighten
$hsl['L'] += (1 - $hsl['L']) / 2;
}
return $hsl;
}
/**
* Mix two RGB colors and return the resulting RGB color
* ported from http://phpxref.pagelines.com/nav.html?includes/class.colors.php.source.html
* @param array $rgb1
* @param array $rgb2
* @param int $amount ranged -100..0..+100
* @return array
*/
private function mixRgb(array $rgb1, array $rgb2, int $amount = 0): array
{
$r1 = ($amount + 100) / 100;
$r2 = 2 - $r1;
$rmix = (($rgb1['R'] * $r1) + ($rgb2['R'] * $r2)) / 2;
$gmix = (($rgb1['G'] * $r1) + ($rgb2['G'] * $r2)) / 2;
$bmix = (($rgb1['B'] * $r1) + ($rgb2['B'] * $r2)) / 2;
return array('R' => $rmix, 'G' => $gmix, 'B' => $bmix);
}
/**
* Given a Hue, returns corresponding RGB value
* @param float $v1
* @param float $v2
* @param float $vH
* @return float
*/
private static function hueToRgb(float $v1, float $v2, float $vH): float
{
if ($vH < 0) {
++$vH;
}
if ($vH > 1) {
--$vH;
}
if ((6 * $vH) < 1) {
return ($v1 + ($v2 - $v1) * 6 * $vH);
}
if ((2 * $vH) < 1) {
return $v2;
}
if ((3 * $vH) < 2) {
return ($v1 + ($v2 - $v1) * ((2 / 3) - $vH) * 6);
}
return $v1;
}
/**
* Checks the HEX string for correct formatting and converts short format to long
* @param string $hex
* @return string
* @throws Exception
*/
private static function sanitizeHex(string $hex): string
{
// Strip # sign if it is present
$color = str_replace("#", "", $hex);
// Validate hex string
if (!preg_match('/^[a-fA-F0-9]+$/', $color)) {
throw new Exception("HEX color does not match format");
}
// Make sure it's 6 digits
if (strlen($color) === 3) {
$color = $color[0] . $color[0] . $color[1] . $color[1] . $color[2] . $color[2];
} elseif (strlen($color) !== 6) {
throw new Exception("HEX color needs to be 6 or 3 digits long");
}
return $color;
}
/**
* Converts object into its string representation
* @return string
*/
public function __toString()
{
return "#" . $this->getHex();
}
/**
* @param string $name
* @return mixed|null
*/
public function __get(string $name)
{
switch (strtolower($name)) {
case 'red':
case 'r':
return $this->_rgb["R"];
case 'green':
case 'g':
return $this->_rgb["G"];
case 'blue':
case 'b':
return $this->_rgb["B"];
case 'hue':
case 'h':
return $this->_hsl["H"];
case 'saturation':
case 's':
return $this->_hsl["S"];
case 'lightness':
case 'l':
return $this->_hsl["L"];
}
$trace = debug_backtrace();
trigger_error(
'Undefined property via __get(): ' . $name . ' in ' . $trace[0]['file'] . ' on line ' . $trace[0]['line'],
E_USER_NOTICE
);
return null;
}
/**
* @param string $name
* @param mixed $value
* @throws Exception
*/
public function __set(string $name, $value)
{
switch (strtolower($name)) {
case 'red':
case 'r':
$this->_rgb["R"] = $value;
$this->_hex = self::rgbToHex($this->_rgb);
$this->_hsl = self::hexToHsl($this->_hex);
break;
case 'green':
case 'g':
$this->_rgb["G"] = $value;
$this->_hex = self::rgbToHex($this->_rgb);
$this->_hsl = self::hexToHsl($this->_hex);
break;
case 'blue':
case 'b':
$this->_rgb["B"] = $value;
$this->_hex = self::rgbToHex($this->_rgb);
$this->_hsl = self::hexToHsl($this->_hex);
break;
case 'hue':
case 'h':
$this->_hsl["H"] = $value;
$this->_hex = self::hslToHex($this->_hsl);
$this->_rgb = self::hexToRgb($this->_hex);
break;
case 'saturation':
case 's':
$this->_hsl["S"] = $value;
$this->_hex = self::hslToHex($this->_hsl);
$this->_rgb = self::hexToRgb($this->_hex);
break;
case 'lightness':
case 'light':
case 'l':
$this->_hsl["L"] = $value;
$this->_hex = self::hslToHex($this->_hsl);
$this->_rgb = self::hexToRgb($this->_hex);
break;
}
}
}

Просмотреть файл

@ -1,11 +0,0 @@
<?php
require __DIR__ . '/../vendor/autoload.php';
require __DIR__ . '/../src/Mexitek/PHPColors/Color.php';
if (!class_exists('Tester\Assert')) {
echo "Install Nette Tester using `composer update --dev`\n";
exit(1);
}
Tester\Environment::setup();

Просмотреть файл

@ -1,35 +0,0 @@
<?php
require __DIR__ . '/bootstrap.php';
use Mexitek\PHPColors\Color;
use Tester\Assert;
$isDark = array(
"000000" => true,
"336699" => true,
"913399" => true,
"E5C3E8" => false,
"D7E8DD" => false,
"218A47" => true,
"3D41CA" => true,
"E5CCDD" => false,
"FFFFFF" => false,
);
foreach ($isDark as $colorHex => $state) {
$color = new Color($colorHex);
Assert::same($state, $color->isDark(), 'Incorrect dark color analyzed (#' . $colorHex . ').');
}
$isLight = array(
"FFFFFF" => true,
"A3FFE5" => true,
"000000" => false,
);
foreach ($isLight as $colorHex => $state) {
$color = new Color($colorHex);
Assert::same($state, $color->isLight(), 'Incorrect light color analyzed (#' . $colorHex . ').');
}

Просмотреть файл

@ -1,28 +0,0 @@
<?php
require __DIR__ . '/bootstrap.php';
use Mexitek\PHPColors\Color;
use Tester\Assert;
$expected = array(
"336699" => "264d73",
"913399" => "6d2673"
);
foreach ($expected as $original => $darker) {
$color = new Color($original);
Assert::same($darker, $color->darken(), 'Incorrect darker color returned.');
}
$expected = array(
"336699" => "4080bf",
"913399" => "b540bf"
);
foreach ($expected as $original => $lighter) {
$color = new Color($original);
Assert::same($lighter, $color->lighten(), "Incorrect lighter color returned.");
}

Просмотреть файл

@ -1,28 +0,0 @@
<?php
require __DIR__ . '/bootstrap.php';
use Mexitek\PHPColors\Color;
use Tester\Assert;
$expected = array(
"ff0000" => "00ffff",
"0000ff" => "ffff00",
"00ff00" => "ff00ff",
"ffff00" => "0000ff",
"00ffff" => "ff0000",
"49cbaf" => "cb4965",
"003eb2" => "b27400",
"b27400" => "003eb2",
"ffff99" => "9999ff",
"ccff00" => "3300ff",
"3300ff" => "ccff00",
"fb4a2c" => "2cddfb",
"9cebff" => "ffb09c",
);
foreach ($expected as $original => $complementary) {
$color = new Color($original);
Assert::same($complementary, $color->complementary(), 'Incorrect complementary color returned.');
}

Просмотреть файл

@ -1,72 +0,0 @@
<?php
require __DIR__ . '/bootstrap.php';
use Mexitek\PHPColors\Color;
use Tester\Assert;
// Colors in HSL, for testing.
$blue = [
'H' => 194,
'S' => 1.0,
'L' => 0.4,
];
$yellow = [
'H' => 57,
'S' => 0.91,
'L' => 0.51,
];
$black = [
'H' => 0,
'S' => 0.0,
'L' => 0.0,
];
$grey = [
'H' => 0,
'S' => 0.0,
'L' => 0.65,
];
$white = [
'H' => 0,
'S' => 0.0,
'L' => 1.0,
];
// Test cases.
$colorsToConvert = array(
'blue' => [ // hsl(194, 100%, 40%)
'hex' => '009ccc',
'hsl' => $blue,
],
'yellow' => [ // hsl(57, 91%, 51%)
'hex' => 'f4e810',
'hsl' => $yellow,
],
'black' => [
'hex' => '000000',
'hsl' => $black,
],
'grey' => [
'hex' => 'a6a6a6',
'hsl' => $grey,
],
'white' => [
'hex' => 'ffffff',
'hsl' => $white,
],
);
foreach ($colorsToConvert as $color) {
$hsl = $color['hsl'];
$hex = $color['hex'];
$answer = Color::hslToHex($hsl);
Assert::same(
$hex,
$answer,
'Incorrect hex result: "' . json_encode($hsl) .
'" should convert to "' . $hex .
'", but output was: "' . $answer . '".'
);
}

Просмотреть файл

@ -1,170 +0,0 @@
<?php
require __DIR__ . '/bootstrap.php';
use Mexitek\PHPColors\Color;
use Tester\Assert;
// Test cases.
$colorsToConvert = array(
'aliceblue' => 'F0F8FF',
'antiquewhite' => 'FAEBD7',
'aqua' => '00FFFF',
'aquamarine' => '7FFFD4',
'azure' => 'F0FFFF',
'beige' => 'F5F5DC',
'bisque' => 'FFE4C4',
'black' => '000000',
'blanchedalmond' => 'FFEBCD',
'blue' => '0000FF',
'blueviolet' => '8A2BE2',
'brown' => 'A52A2A',
'burlywood' => 'DEB887',
'cadetblue' => '5F9EA0',
'chartreuse' => '7FFF00',
'chocolate' => 'D2691E',
'coral' => 'FF7F50',
'cornflowerblue' => '6495ED',
'cornsilk' => 'FFF8DC',
'crimson' => 'DC143C',
'cyan' => '00FFFF',
'darkblue' => '00008B',
'darkcyan' => '008B8B',
'darkgoldenrod' => 'B8860B',
'darkgray' => 'A9A9A9',
'darkgreen' => '006400',
'darkgrey' => 'A9A9A9',
'darkkhaki' => 'BDB76B',
'darkmagenta' => '8B008B',
'darkolivegreen' => '556B2F',
'darkorange' => 'FF8C00',
'darkorchid' => '9932CC',
'darkred' => '8B0000',
'darksalmon' => 'E9967A',
'darkseagreen' => '8FBC8F',
'darkslateblue' => '483D8B',
'darkslategray' => '2F4F4F',
'darkslategrey' => '2F4F4F',
'darkturquoise' => '00CED1',
'darkviolet' => '9400D3',
'deeppink' => 'FF1493',
'deepskyblue' => '00BFFF',
'dimgray' => '696969',
'dimgrey' => '696969',
'dodgerblue' => '1E90FF',
'firebrick' => 'B22222',
'floralwhite' => 'FFFAF0',
'forestgreen' => '228B22',
'fuchsia' => 'FF00FF',
'gainsboro' => 'DCDCDC',
'ghostwhite' => 'F8F8FF',
'gold' => 'FFD700',
'goldenrod' => 'DAA520',
'gray' => '808080',
'green' => '008000',
'greenyellow' => 'ADFF2F',
'grey' => '808080',
'honeydew' => 'F0FFF0',
'hotpink' => 'FF69B4',
'indianred' => 'CD5C5C',
'indigo' => '4B0082',
'ivory' => 'FFFFF0',
'khaki' => 'F0E68C',
'lavender' => 'E6E6FA',
'lavenderblush' => 'FFF0F5',
'lawngreen' => '7CFC00',
'lemonchiffon' => 'FFFACD',
'lightblue' => 'ADD8E6',
'lightcoral' => 'F08080',
'lightcyan' => 'E0FFFF',
'lightgoldenrodyellow' => 'FAFAD2',
'lightgray' => 'D3D3D3',
'lightgreen' => '90EE90',
'lightgrey' => 'D3D3D3',
'lightpink' => 'FFB6C1',
'lightsalmon' => 'FFA07A',
'lightseagreen' => '20B2AA',
'lightskyblue' => '87CEFA',
'lightslategray' => '778899',
'lightslategrey' => '778899',
'lightsteelblue' => 'B0C4DE',
'lightyellow' => 'FFFFE0',
'lime' => '00FF00',
'limegreen' => '32CD32',
'linen' => 'FAF0E6',
'magenta' => 'FF00FF',
'maroon' => '800000',
'mediumaquamarine' => '66CDAA',
'mediumblue' => '0000CD',
'mediumorchid' => 'BA55D3',
'mediumpurple' => '9370D0',
'mediumseagreen' => '3CB371',
'mediumslateblue' => '7B68EE',
'mediumspringgreen' => '00FA9A',
'mediumturquoise' => '48D1CC',
'mediumvioletred' => 'C71585',
'midnightblue' => '191970',
'mintcream' => 'F5FFFA',
'mistyrose' => 'FFE4E1',
'moccasin' => 'FFE4B5',
'navajowhite' => 'FFDEAD',
'navy' => '000080',
'oldlace' => 'FDF5E6',
'olive' => '808000',
'olivedrab' => '6B8E23',
'orange' => 'FFA500',
'orangered' => 'FF4500',
'orchid' => 'DA70D6',
'palegoldenrod' => 'EEE8AA',
'palegreen' => '98FB98',
'paleturquoise' => 'AFEEEE',
'palevioletred' => 'DB7093',
'papayawhip' => 'FFEFD5',
'peachpuff' => 'FFDAB9',
'peru' => 'CD853F',
'pink' => 'FFC0CB',
'plum' => 'DDA0DD',
'powderblue' => 'B0E0E6',
'purple' => '800080',
'red' => 'FF0000',
'rosybrown' => 'BC8F8F',
'royalblue' => '4169E1',
'saddlebrown' => '8B4513',
'salmon' => 'FA8072',
'sandybrown' => 'F4A460',
'seagreen' => '2E8B57',
'seashell' => 'FFF5EE',
'sienna' => 'A0522D',
'silver' => 'C0C0C0',
'skyblue' => '87CEEB',
'slateblue' => '6A5ACD',
'slategray' => '708090',
'slategrey' => '708090',
'snow' => 'FFFAFA',
'springgreen' => '00FF7F',
'steelblue' => '4682B4',
'tan' => 'D2B48C',
'teal' => '008080',
'thistle' => 'D8BFD8',
'tomato' => 'FF6347',
'turquoise' => '40E0D0',
'violet' => 'EE82EE',
'wheat' => 'F5DEB3',
'white' => 'FFFFFF',
'whitesmoke' => 'F5F5F5',
'yellow' => 'FFFF00',
'yellowgreen' => '9ACD32'
);
foreach ($colorsToConvert as $name => $hex) {
$hex = '#' . $hex;
$answer = Color::nameToHex($name);
Assert::same(
$hex,
$answer,
'Incorrect hex result: "' . Color::nameToHex($name) .
'" should convert to "' . $hex .
'", but output was: "' . $answer . '".'
);
}

Просмотреть файл

@ -1,72 +0,0 @@
<?php
require __DIR__ . '/bootstrap.php';
use Mexitek\PHPColors\Color;
use Tester\Assert;
// Colors in RGB, for testing.
$blue = [
'R' => 0,
'G' => 158,
'B' => 204,
];
$yellow = [
'R' => 244,
'G' => 231,
'B' => 15,
];
$black = [
'R' => 0,
'G' => 0,
'B' => 0,
];
$white = [
'R' => 255,
'G' => 255,
'B' => 255,
];
// Test cases.
$colorsToConvert = array(
'blue' => [ // rgb(0, 158, 204)
'hex' => '009ecc',
'rgb' => $blue,
],
'yellow' => [ // rgb(244, 231, 15)
'hex' => 'f4e70f',
'rgb' => $yellow,
],
'black' => [
'hex' => '000000',
'rgb' => $black,
],
'white' => [
'hex' => 'ffffff',
'rgb' => $white,
],
);
foreach ($colorsToConvert as $color) {
$rgb = $color['rgb'];
$hex = $color['hex'];
$answer = Color::rgbToHex($rgb);
Assert::same(
$hex,
$answer,
'Incorrect hex result: "' . Color::rgbToString($rgb) .
'" should convert to "' . $hex .
'", but output was: "' . $answer . '".'
);
$revertAnswer = Color::hexToRgb($hex);
Assert::same(
$rgb,
$revertAnswer,
'Incorrect rgb result: "' . $hex .
'" should convert to "' . Color::rgbToString($rgb) .
'", but output was: "' . Color::rgbToString($revertAnswer) . '".'
);
}

Просмотреть файл

@ -1,19 +0,0 @@
<?php
require __DIR__ . '/bootstrap.php';
use Mexitek\PHPColors\Color;
use Tester\Assert;
// Test that a hex starting with '#' is supported as input
$expected = array(
"#ffffff",
"#00ff00",
"#000000",
"#ff9a00",
);
foreach ($expected as $input) {
$color = new Color($input);
Assert::same((string) $color, $input, 'Incorrect color returned.');
}

Просмотреть файл

@ -1,24 +0,0 @@
<?php
require __DIR__ . '/bootstrap.php';
use Mexitek\PHPColors\Color;
use Tester\Assert;
$expected = array(
"ffffff" => array("ff0000", "ff7f7f"), // ffffff + ff0000 = ff7f7f
"00ff00" => array("ff0000", "7f7f00"),
"000000" => array("ff0000", "7f0000"),
"002fff" => array("000000", "00177f"),
"00ffed" => array("000000", "007f76"),
"ff9a00" => array("000000", "7f4d00"),
"ff9a00" => array("ffffff", "ffcc7f"),
"00ff2d" => array("ffffff", "7fff96"),
"8D43B4" => array("35CF64", "61898c"),
);
foreach ($expected as $original => $complementary) {
$color = new Color($original);
Assert::same($complementary[1], $color->mix($complementary[0]), 'Incorrect mix color returned.');
}