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

declare(strict_types=1);

namespace 
InterventionImageDriversGdEncoders;

use 
Exception;
use 
InterventionGifBuilder as GifBuilder;
use 
InterventionImageDriversGdCloner;
use 
InterventionImageEncodedImage;
use 
InterventionImageEncodersGifEncoder as GenericGifEncoder;
use 
InterventionImageExceptionsEncoderException;
use 
InterventionImageExceptionsRuntimeException;
use 
InterventionImageInterfacesImageInterface;
use 
InterventionImageInterfacesSpecializedInterface;

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

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

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

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

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

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

            return new 
EncodedImage($builder->encode(), 'image/gif');
        } catch (
Exception $e) {
            throw new 
EncoderException($e->getMessage(), $e->getCode(), $e);
        }
    }
}
Онлайн: 2
Реклама