使用PHP优化GIF

时间:2014-02-03 15:10:34

标签: php optimization gif

我有一个用于使用网络摄像头捕获视频的脚本,并将此视频转换为.gif。

我有这个脚本用于调整大小并使用PHP保存文件.gif:

$image = new Imagick();
$decoded = base64_decode($gif);
$image->readimageblob($decoded);
$image = $image->coalesceImages();

foreach ($image as $frame) {
    $frame->cropImage($w, $h, $x, $y);
    $frame->thumbnailImage(117, 135);
    $frame->setImagePage(117, 135, 0, 0);
}

$image_name = uniqid(rand()).'.gif';
$image = $image->deconstructImages();
$image->writeImages('uploads/profiles/'.$image_name, true);

return $image_name;

所以,使用这个脚本,我检索尺寸为400-500ko的.gif文件,我认为它对于一个简单的gif为117px / 135px非常大......

如何优化此gif以减小尺寸?谢谢!

3 个答案:

答案 0 :(得分:1)

你可以跳过一些帧来缩小

// Use every other frame only
foreach ($image as $k => $frame) {
    if ($k%2) { // Use last frame if odd
        $frame = $lastFrame;
    } else {
        $frame->cropImage($w, $h, $x, $y);
        $frame->thumbnailImage(117, 135);
        $frame->setImagePage(117, 135, 0, 0);
    }
    $lastFrame = $frame;
}

答案 1 :(得分:0)

它非常大,因为它是一个动画GIF,它有多个帧。一种选择是使用Imagick::optimizeImageLayers()来优化图像的图层。

这是一个例子(来自PHP文档):

<?php

/* create new imagick object */
$im = new Imagick("test.gif");

/* optimize the image layers */
$im->optimizeImageLayers();

/* write the image back */
$im->writeImages("test_optimized.gif", true);

?>

答案 2 :(得分:-2)

你可以在php中使用ob_gzhandler

了解更多细节,请看

http://php.net/manual/en/function.ob-gzhandler.php

此示例可能会帮助您

http://www.devirtuoso.com/2009/07/how-to-compress-cssjavascript-files-with-php/

如果没有任何帮助,您可以使用系统功能并使用终端或命令行命令

使用os命令压缩结果文件

成功