Skip to content

Commit

Permalink
Добавление начальных файлов
Browse files Browse the repository at this point in the history
  • Loading branch information
dmitriitux committed May 11, 2019
1 parent aaaeef9 commit faf8b6b
Show file tree
Hide file tree
Showing 128 changed files with 8,526 additions and 0 deletions.
226 changes: 226 additions & 0 deletions Intervention/Image/AbstractColor.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,226 @@
<?php

namespace Intervention\Image;

abstract class AbstractColor
{
/**
* Initiates color object from integer
*
* @param int $value
* @return \Intervention\Image\AbstractColor
*/
abstract public function initFromInteger($value);

/**
* Initiates color object from given array
*
* @param array $value
* @return \Intervention\Image\AbstractColor
*/
abstract public function initFromArray($value);

/**
* Initiates color object from given string
*
* @param string $value
* @return \Intervention\Image\AbstractColor
*/
abstract public function initFromString($value);

/**
* Initiates color object from given ImagickPixel object
*
* @param ImagickPixel $value
* @return \Intervention\Image\AbstractColor
*/
abstract public function initFromObject($value);

/**
* Initiates color object from given R, G and B values
*
* @param int $r
* @param int $g
* @param int $b
* @return \Intervention\Image\AbstractColor
*/
abstract public function initFromRgb($r, $g, $b);

/**
* Initiates color object from given R, G, B and A values
*
* @param int $r
* @param int $g
* @param int $b
* @param float $a
* @return \Intervention\Image\AbstractColor
*/
abstract public function initFromRgba($r, $g, $b, $a);

/**
* Calculates integer value of current color instance
*
* @return int
*/
abstract public function getInt();

/**
* Calculates hexadecimal value of current color instance
*
* @param string $prefix
* @return string
*/
abstract public function getHex($prefix);

/**
* Calculates RGB(A) in array format of current color instance
*
* @return array
*/
abstract public function getArray();

/**
* Calculates RGBA in string format of current color instance
*
* @return string
*/
abstract public function getRgba();

/**
* Determines if current color is different from given color
*
* @param AbstractColor $color
* @param int $tolerance
* @return boolean
*/
abstract public function differs(AbstractColor $color, $tolerance = 0);

/**
* Creates new instance
*
* @param mixed $value
*/
public function __construct($value = null)
{
$this->parse($value);
}

/**
* Parses given value as color
*
* @param mixed $value
* @return \Intervention\Image\AbstractColor
*/
public function parse($value)
{
switch (true) {

case is_string($value):
$this->initFromString($value);
break;

case is_int($value):
$this->initFromInteger($value);
break;

case is_array($value):
$this->initFromArray($value);
break;

case is_object($value):
$this->initFromObject($value);
break;

case is_null($value):
$this->initFromArray([255, 255, 255, 0]);
break;

default:
throw new \Intervention\Image\Exception\NotReadableException(
"Color format ({$value}) cannot be read."
);
}

return $this;
}

/**
* Formats current color instance into given format
*
* @param string $type
* @return mixed
*/
public function format($type)
{
switch (strtolower($type)) {

case 'rgba':
return $this->getRgba();

case 'hex':
return $this->getHex('#');

case 'int':
case 'integer':
return $this->getInt();

case 'array':
return $this->getArray();

case 'obj':
case 'object':
return $this;

default:
throw new \Intervention\Image\Exception\NotSupportedException(
"Color format ({$type}) is not supported."
);
}
}

/**
* Reads RGBA values from string into array
*
* @param string $value
* @return array
*/
protected function rgbaFromString($value)
{
$result = false;

// parse color string in hexidecimal format like #cccccc or cccccc or ccc
$hexPattern = '/^#?([a-f0-9]{1,2})([a-f0-9]{1,2})([a-f0-9]{1,2})$/i';

// parse color string in format rgb(140, 140, 140)
$rgbPattern = '/^rgb ?\(([0-9]{1,3}), ?([0-9]{1,3}), ?([0-9]{1,3})\)$/i';

// parse color string in format rgba(255, 0, 0, 0.5)
$rgbaPattern = '/^rgba ?\(([0-9]{1,3}), ?([0-9]{1,3}), ?([0-9]{1,3}), ?([0-9.]{1,4})\)$/i';

if (preg_match($hexPattern, $value, $matches)) {
$result = [];
$result[0] = strlen($matches[1]) == '1' ? hexdec($matches[1].$matches[1]) : hexdec($matches[1]);
$result[1] = strlen($matches[2]) == '1' ? hexdec($matches[2].$matches[2]) : hexdec($matches[2]);
$result[2] = strlen($matches[3]) == '1' ? hexdec($matches[3].$matches[3]) : hexdec($matches[3]);
$result[3] = 1;
} elseif (preg_match($rgbPattern, $value, $matches)) {
$result = [];
$result[0] = ($matches[1] >= 0 && $matches[1] <= 255) ? intval($matches[1]) : 0;
$result[1] = ($matches[2] >= 0 && $matches[2] <= 255) ? intval($matches[2]) : 0;
$result[2] = ($matches[3] >= 0 && $matches[3] <= 255) ? intval($matches[3]) : 0;
$result[3] = 1;
} elseif (preg_match($rgbaPattern, $value, $matches)) {
$result = [];
$result[0] = ($matches[1] >= 0 && $matches[1] <= 255) ? intval($matches[1]) : 0;
$result[1] = ($matches[2] >= 0 && $matches[2] <= 255) ? intval($matches[2]) : 0;
$result[2] = ($matches[3] >= 0 && $matches[3] <= 255) ? intval($matches[3]) : 0;
$result[3] = ($matches[4] >= 0 && $matches[4] <= 1) ? $matches[4] : 0;
} else {
throw new \Intervention\Image\Exception\NotReadableException(
"Unable to read color ({$value})."
);
}

return $result;
}
}
Loading

0 comments on commit faf8b6b

Please sign in to comment.