У меня есть следующий код для создания анимированного GIF из списка изображений.Работает нормально но хотелось бы сжать.Я перепробовал много разных стратегий, но полученный размер всегда точно одинаковый.
Что я делаю не так?
<?php
namespace AppBundle\Service;
class GifCreator
{
public function createGifFromImages(array $images)
{
// https://stackoverflow.com/a/10095594
$gif = new \Imagick();
$gif->setFormat("gif");
// adds all the images
foreach ($images as $image) {
$frame = new \Imagick();
$frame->readImage($image->getRealPath());
// THE FOLLOWING 2 LINES ARE NOT WORKING
//$frame->setImageCompression(\Imagick::COMPRESSION_JPEG);
//$frame->setImageCompressionQuality(5);
$frame->setImageDelay(50);
$gif->addImage($frame);
}
// optimizes the GIF
$gif->optimizeImageLayers();
// https://hotexamples.com/examples/-/Imagick/optimizeImageLayers/php-imagick-optimizeimagelayers-method-examples.html
// THE FOLLOWING 2 LINES ARE NOT WORKING
//$gif->setImageCompression(\Imagick::COMPRESSION_LZW);
//$gif->setImageCompressionQuality(30);
// writes the GIF
$tempPath = tempnam(sys_get_temp_dir(), 'GIF');
$result = $gif->writeImages($tempPath, true);
return $tempPath;
}
}
Кажется, что addImage
не применяет надлежащие фильтры.