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

declare(strict_types=1);

namespace 
InterventionImageColors;

use 
InterventionImageExceptionsInvalidArgumentException;
use 
InterventionImageInterfacesColorChannelInterface;
use 
Stringable;

abstract class 
AbstractColorChannel implements ColorChannelInterfaceStringable
{
    
/**
     * Main color channel value.
     */
    
protected int|float $value;

    
/**
     * {@inheritdoc}
     *
     * @see ColorChannelInterface::normalized()
     */
    
public function normalized(int $precision 32): float
    
{
        return 
round(($this->value() - $this->min()) / ($this->max() - $this->min()), $precision);
    }

    
/**
     * {@inheritdoc}
     *
     * @see ColorChannelInterface::scale()
     *
     * @throws InvalidArgumentException
     */
    
public function scale(int $percent): self
    
{
        if (
$percent === 0) {
            return 
$this;
        }

        if (
$percent < -100 || $percent 100) {
            throw new 
InvalidArgumentException('Percentage value must be between -100 and 100');
        }

        
$normalized $this->normalized();
        
$base $percent >= ? ($normalized) : $normalized;
        
$scaled min(1.0max(0.0$normalized $base 100 $percent));
        
$this->value = static::fromNormalized($scaled)->value();

        return 
$this;
    }

    
/**
     * Throw exception if the given value is not applicable for channel
     * otherwise the value is returned unchanged.
     *
     * @throws InvalidArgumentException
     */
    
protected function validValueOrFail(int|float $value): mixed
    
{
        if (
$value $this->min() || $value $this->max()) {
            throw new 
InvalidArgumentException(
                
'Color channel ' $this::class . ' value must be in range ' $this->min() . ' to ' $this->max(),
            );
        }

        return 
$value;
    }

    
/**
     * {@inheritdoc}
     *
     * @see ColorChannelInterface::toString()
     */
    
public function toString(): string
    
{
        return (string) 
$this->value();
    }

    
/**
     * {@inheritdoc}
     *
     * @see ColorChannelInterface::__toString()
     */
    
public function __toString(): string
    
{
        return 
$this->toString();
    }
}
Онлайн: 2
Реклама