我有一个用于使用网络摄像头捕获视频的脚本,并将此视频转换为.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以减小尺寸?谢谢!
答案 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命令压缩结果文件
成功