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

declare(strict_types=1);

namespace 
InterventionImageDriversGd;

use 
InterventionImageDriversAbstractDriver;
use 
InterventionImageExceptionsDriverException;
use 
InterventionImageExceptionsRuntimeException;
use 
InterventionImageFormat;
use 
InterventionImageFileExtension;
use 
InterventionImageImage;
use 
InterventionImageInterfacesColorProcessorInterface;
use 
InterventionImageInterfacesColorspaceInterface;
use 
InterventionImageInterfacesDriverInterface;
use 
InterventionImageInterfacesFontProcessorInterface;
use 
InterventionImageInterfacesImageInterface;
use 
InterventionImageMediaType;

class 
Driver extends AbstractDriver
{
    
/**
     * {@inheritdoc}
     *
     * @see DriverInterface::id()
     */
    
public function id(): string
    
{
        return 
'GD';
    }

    
/**
     * {@inheritdoc}
     *
     * @see DriverInterface::checkHealth()
     * @codeCoverageIgnore
     */
    
public function checkHealth(): void
    
{
        if (!
extension_loaded('gd') || !function_exists('gd_info')) {
            throw new 
DriverException(
                
'GD PHP extension must be installed to use this driver.'
            
);
        }
    }

    
/**
     * {@inheritdoc}
     *
     * @see DriverInterface::createImage()
     */
    
public function createImage(int $widthint $height): ImageInterface
    
{
        
// build new transparent GDImage
        
$data imagecreatetruecolor($width$height);
        
imagesavealpha($datatrue);
        
$background imagecolorallocatealpha($data255255255127);
        
imagealphablending($datafalse);
        
imagefill($data00$background);
        
imagecolortransparent($data$background);

        return new 
Image(
            
$this,
            new 
Core([
                new 
Frame($data)
            ])
        );
    }

    
/**
     * {@inheritdoc}
     *
     * @throws RuntimeException
     * @see DriverInterface::createAnimation()
     */
    
public function createAnimation(callable $init): ImageInterface
    
{
        
$animation = new class ($this)
        {
            public function 
__construct(
                protected 
DriverInterface $driver,
                public 
Core $core = new Core()
            ) {
            }

            
/**
             * @throws RuntimeException
             */
            
public function add(mixed $sourcefloat $delay 1): self
            
{
                
$this->core->add(
                    
$this->driver->handleInput($source)->core()->first()->setDelay($delay)
                );

                return 
$this;
            }

            
/**
             * @throws RuntimeException
             */
            
public function __invoke(): ImageInterface
            
{
                return new 
Image(
                    
$this->driver,
                    
$this->core
                
);
            }
        };

        
$init($animation);

        return 
call_user_func($animation);
    }

    
/**
     * {@inheritdoc}
     *
     * @see DriverInterface::colorProcessor()
     */
    
public function colorProcessor(ColorspaceInterface $colorspace): ColorProcessorInterface
    
{
        return new 
ColorProcessor($colorspace);
    }

    
/**
     * {@inheritdoc}
     *
     * @see DriverInterface::fontProcessor()
     */
    
public function fontProcessor(): FontProcessorInterface
    
{
        return new 
FontProcessor();
    }

    
/**
     * {@inheritdoc}
     *
     * @see DriverInterface::supports()
     */
    
public function supports(string|Format|FileExtension|MediaType $identifier): bool
    
{
        return 
match (Format::tryCreate($identifier)) {
            
Format::JPEG => boolval(imagetypes() & IMG_JPEG),
            
Format::WEBP => boolval(imagetypes() & IMG_WEBP),
            
Format::GIF => boolval(imagetypes() & IMG_GIF),
            
Format::PNG => boolval(imagetypes() & IMG_PNG),
            
Format::AVIF => boolval(imagetypes() & IMG_AVIF),
            
Format::BMP => boolval(imagetypes() & IMG_BMP),
            default => 
false,
        };
    }

    
/**
     * Return version of GD library
     *
     * @return string
     */
    
public static function version(): string
    
{
        return 
gd_info()['GD Version'];
    }
}
Онлайн: 2
Реклама