Вход Регистрация
Файл: vendor/intervention/image/src/Colors/Rgb/Decoders/HexColorDecoder.php
Строк: 76
<?php

declare(strict_types=1);

namespace 
InterventionImageColorsRgbDecoders;

use 
InterventionImageColorsRgbColor;
use 
InterventionImageDriversAbstractDecoder;
use 
InterventionImageExceptionsDecoderException;
use 
InterventionImageInterfacesColorInterface;
use 
InterventionImageInterfacesDecoderInterface;
use 
InterventionImageInterfacesImageInterface;

class 
HexColorDecoder extends AbstractDecoder implements DecoderInterface
{
    
/**
     * Decode hexadecimal rgb colors with and without transparency
     *
     * @param mixed $input
     * @return ImageInterface|ColorInterface
     */
    
public function decode(mixed $input): ImageInterface|ColorInterface
    
{
        if (!
is_string($input)) {
            throw new 
DecoderException('Unable to decode input');
        }

        
$pattern '/^#?(?P<hex>[a-fd]{3}(?:[a-fd]?|(?:[a-fd]{3}(?:[a-fd]{2})?)?)b)$/i';
        if (
preg_match($pattern$input$matches) != 1) {
            throw new 
DecoderException('Unable to decode input');
        }

        
$values match (strlen($matches['hex'])) {
            
3=> str_split($matches['hex']),
            
6=> str_split($matches['hex'], 2),
            default => throw new 
DecoderException('Unable to decode input'),
        };

        
$values array_map(function (string $value): float|int {
            return 
match (strlen($value)) {
                
=> hexdec($value $value),
                
=> hexdec($value),
                default => throw new 
DecoderException('Unable to decode input'),
            };
        }, 
$values);

        return new 
Color(...$values);
    }
}
Онлайн: 5
Реклама