芝麻web文件管理V1.00
编辑当前文件:/home/pulsehostuk9/www/invoicer.pulsehost.co.uk/vendor/spatie/image/src/Drivers/Color.php
$value */ abstract public function initFromArray(array $value): self; abstract public function initFromString(string $value): self; abstract public function initFromObject(ImagickPixel $value): self; abstract public function initFromRgb(int $red, int $green, int $blue): self; abstract public function initFromRgba(int $red, int $green, int $blue, float $alpha): self; abstract public function getInt(): int; abstract public function getHex(string $prefix): string; /** @return array
*/ abstract public function getArray(): array; abstract public function getRgba(): string; abstract public function differs(self $color, int $tolerance = 0): bool; public function __construct(mixed $value = null) { $this->parse($value); } public function parse(mixed $colorValue): self { match (true) { is_string($colorValue) => $this->initFromString($colorValue), is_int($colorValue) => $this->initFromInteger($colorValue), is_array($colorValue) => $this->initFromArray($colorValue), $colorValue instanceof ImagickPixel => $this->initFromObject($colorValue), is_null($colorValue) => $this->initFromArray([255, 255, 255, 0]), default => throw InvalidColor::make($colorValue), }; return $this; } public function format(ColorFormat $colorFormat): mixed { return match ($colorFormat) { ColorFormat::Rgba => $this->getRgba(), ColorFormat::Hex => $this->getHex('#'), ColorFormat::Int => $this->getInt(), ColorFormat::Array => $this->getArray(), ColorFormat::Object => $this, }; } /** @return array
*/ protected function rgbaFromString(string $colorValue): array { // 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, $colorValue, $matches)) { $result = []; $result[0] = strlen($matches[1]) == '1' ? (int) hexdec($matches[1].$matches[1]) : (int) hexdec($matches[1]); $result[1] = strlen($matches[2]) == '1' ? (int) hexdec($matches[2].$matches[2]) : (int) hexdec($matches[2]); $result[2] = strlen($matches[3]) == '1' ? (int) hexdec($matches[3].$matches[3]) : (int) hexdec($matches[3]); $result[3] = 1; } elseif (preg_match($rgbPattern, $colorValue, $matches)) { $result = []; $result[0] = ($matches[1] >= 0 && $matches[1] <= 255) ? (int) ($matches[1]) : 0; $result[1] = ($matches[2] >= 0 && $matches[2] <= 255) ? (int) ($matches[2]) : 0; $result[2] = ($matches[3] >= 0 && $matches[3] <= 255) ? (int) ($matches[3]) : 0; $result[3] = 1; } elseif (preg_match($rgbaPattern, $colorValue, $matches)) { $result = []; $result[0] = ($matches[1] >= 0 && $matches[1] <= 255) ? (int) ($matches[1]) : 0; $result[1] = ($matches[2] >= 0 && $matches[2] <= 255) ? (int) ($matches[2]) : 0; $result[2] = ($matches[3] >= 0 && $matches[3] <= 255) ? (int) ($matches[3]) : 0; $result[3] = ($matches[4] >= 0 && $matches[4] <= 1) ? (float) ($matches[4]) : 0; } else { throw InvalidColor::make($colorValue); } return $result; } }