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

declare(strict_types=1);

namespace 
InterventionImageDriversGdEncoders;

use 
InterventionGifBuilder as GifBuilder;
use 
InterventionGifExceptionsGifException;
use 
InterventionImageDriversGdCloner;
use 
InterventionImageEncodedImage;
use 
InterventionImageEncodersGifEncoder as GenericGifEncoder;
use 
InterventionImageExceptionsDriverException;
use 
InterventionImageExceptionsEncoderException;
use 
InterventionImageExceptionsStreamException;
use 
InterventionImageExceptionsFilesystemException;
use 
InterventionImageExceptionsInvalidArgumentException;
use 
InterventionImageInterfacesEncodedImageInterface;
use 
InterventionImageInterfacesImageInterface;
use 
InterventionImageInterfacesSpecializedInterface;

class 
GifEncoder extends GenericGifEncoder implements SpecializedInterface
{
    
/**
     * {@inheritdoc}
     *
     * @see EncoderInterface::encode()
     *
     * @throws InvalidArgumentException
     * @throws EncoderException
     * @throws DriverException
     * @throws StreamException
     */
    
public function encode(ImageInterface $image): EncodedImageInterface
    
{
        if (
$image->isAnimated()) {
            return 
$this->encodeAnimated($image);
        }

        
$gd Cloner::clone($image->core()->native());

        return 
$this->createEncodedImage(function ($stream) use ($gd): void {
            
imageinterlace($gd$this->interlaced);
            
imagegif($gd$stream);
        }, 
'image/gif');
    }

    
/**
     * @throws InvalidArgumentException
     * @throws EncoderException
     * @throws DriverException
     */
    
protected function encodeAnimated(ImageInterface $image): EncodedImageInterface
    
{
        try {
            
$builder GifBuilder::canvas(
                
$image->width(),
                
$image->height(),
            );

            foreach (
$image as $frame) {
                
$builder->addFrame(
                    
source$this->encode($frame->toImage($image->driver()))->toStream(),
                    
delay$frame->delay(),
                    
interlaced$this->interlaced,
                );
            }

            
$builder->setLoops($image->loops());

            return new 
EncodedImage($builder->encode(), 'image/gif');
        } catch (
GifException FilesystemException $e) {
            throw new 
EncoderException('Failed to encode image to GIF format'previous$e);
        }
    }
}
Онлайн: 1
Реклама