paste.chapril.org-privatebin/vendor/yzalis/identicon/src/Identicon/Generator/BaseGenerator.php

251 lines
4.6 KiB
PHP

<?php
namespace Identicon\Generator;
use Exception;
/**
* @author Benjamin Laugueux <benjamin@yzalis.com>
*/
class BaseGenerator
{
/**
* @var mixed
*/
protected $generatedImage;
/**
* @var array
*/
protected $color;
/**
* @var array
*/
protected $backgroundColor;
/**
* @var int
*/
protected $size;
/**
* @var int
*/
protected $pixelRatio;
/**
* @var string
*/
private $hash;
/**
* @var array
*/
private $arrayOfSquare = [];
/**
* Set the image color.
*
* @param string|array $color The color in hexa (3 or 6 chars) or rgb array
*
* @return $this
*/
public function setColor($color)
{
if (null === $color) {
return $this;
}
$this->color = $this->convertColor($color);
return $this;
}
/**
* Set the image background color.
*
* @param string|array $backgroundColor The color in hexa (3 or 6 chars) or rgb array
*
* @return $this
*/
public function setBackgroundColor($backgroundColor)
{
if (null === $backgroundColor) {
return $this;
}
$this->backgroundColor = $this->convertColor($backgroundColor);
return $this;
}
/**
* @param array|string $color
*
* @return array
*/
private function convertColor($color)
{
if (is_array($color)) {
return $color;
}
if (preg_match('/^#?([a-z\d])([a-z\d])([a-z\d])$/i', $color, $matches)) {
$color = $matches[1].$matches[1];
$color .= $matches[2].$matches[2];
$color .= $matches[3].$matches[3];
}
preg_match('/#?([a-z\d]{2})([a-z\d]{2})([a-z\d]{2})$/i', $color, $matches);
return array_map(function ($value) {
return hexdec($value);
}, array_slice($matches, 1, 3));
}
/**
* Get the color.
*
* @return array
*/
public function getColor()
{
return $this->color;
}
/**
* Get the background color.
*
* @return array
*/
public function getBackgroundColor()
{
return $this->backgroundColor;
}
/**
* Convert the hash into an multidimensional array of boolean.
*
* @return $this
*/
private function convertHashToArrayOfBoolean()
{
preg_match_all('/(\w)(\w)/', $this->hash, $chars);
foreach ($chars[1] as $i => $char) {
$index = (int) ($i / 3);
$data = $this->convertHexaToBoolean($char);
$items = [
0 => [0, 4],
1 => [1, 3],
2 => [2],
];
foreach ($items[$i % 3] as $item) {
$this->arrayOfSquare[$index][$item] = $data;
}
ksort($this->arrayOfSquare[$index]);
}
$this->color = array_map(function ($data) {
return hexdec($data) * 16;
}, array_reverse($chars[1]));
return $this;
}
/**
* Convert an hexadecimal number into a boolean.
*
* @param string $hexa
*
* @return bool
*/
private function convertHexaToBoolean($hexa)
{
return (bool) round(hexdec($hexa) / 10);
}
/**
* @return array
*/
public function getArrayOfSquare()
{
return $this->arrayOfSquare;
}
/**
* Get the identicon string hash.
*
* @return string
*/
public function getHash()
{
return $this->hash;
}
/**
* Generate a hash from the original string.
*
* @param string $string
*
* @throws \Exception
*
* @return $this
*/
public function setString($string)
{
if (null === $string) {
throw new Exception('The string cannot be null.');
}
$this->hash = md5($string);
$this->convertHashToArrayOfBoolean();
return $this;
}
/**
* Set the image size.
*
* @param int $size
*
* @return $this
*/
public function setSize($size)
{
if (null === $size) {
return $this;
}
$this->size = $size;
$this->pixelRatio = (int) round($size / 5);
return $this;
}
/**
* Get the image size.
*
* @return int
*/
public function getSize()
{
return $this->size;
}
/**
* Get the pixel ratio.
*
* @return int
*/
public function getPixelRatio()
{
return $this->pixelRatio;
}
}