如果我在php中使用GD库制作了一堆图像资源,或者其他一堆帧,我如何将它们组合成动画gif?我有一系列图像和每秒帧数我想添加..
我无法使用ImageMagick或FFMPEG,如果可能的话,我更愿意使用GD库。
显然"Support for creating GIF animations is also available.",但我似乎无法找到有关如何从PHP中访问此文档的文档?
答案 0 :(得分:4)
这不能用GD完成,但我找到了一个很棒的库。虽然它有点复杂,所以这里有一个链接到库,用PHP制作动画GIF。它解释了如何彻底使用它。 http://www.phpclasses.org/package/3163-PHP-Generate-GIF-animations-from-a-set-of-GIF-images.html
您可以使用此库查看我的示例:
只需选择2张图片,并为宽度和高度写入速度900的100。它将把它们放在动画幻灯片幻灯片中。
以下是该脚本的代码:
<?php
if(isset($_POST['speed']))
{
header('Content-type: image/gif');
if(isset($_POST['download'])){
header('Content-Disposition: attachment; filename="animated.gif"');
}
include('GIFEncoder.class.php');
function frame($image){
ob_start();
imagegif($image);
global $frames, $framed;
$frames[]=ob_get_contents();
$framed[]=$_POST['speed'];
ob_end_clean();
}
foreach ($_FILES["images"]["error"] as $key => $error)
{
if ($error == UPLOAD_ERR_OK)
{
$tmp_name = $_FILES["images"]["tmp_name"][$key];
$im = imagecreatefromstring(file_get_contents($tmp_name));
$resized = imagecreatetruecolor($_POST['width'],$_POST['height']);
imagecopyresized($resized, $im, 0, 0, 0, 0, $_POST['width'], $_POST['height'], imagesx($im), imagesy($im));
frame($resized);
}
}
$gif = new GIFEncoder($frames,$framed,0,2,0,0,0,'bin');
echo $gif->GetAnimation();
}
?>
<form action="" method="post" enctype="multipart/form-data">
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script src="jquery.MultiFile.js"></script>
<script src="jquery.placeholder.js"></script>
<input type="file" name="images[]" class="multi" />
<script>
$(function(){
$('input[placeholder], textarea[placeholder]').placeholder();
});
</script>
<SCRIPT language=Javascript>
<!--
function isNumberKey(evt)
{
var charCode = (evt.which) ? evt.which : event.keyCode
if (charCode > 31 && (charCode < 48 || charCode > 57))
return false;
return true;
}
//-->
</SCRIPT>
<input name="speed" maxlength="10" type="text" placeholder="Speed of frames in ms" onkeypress="return isNumberKey(event)">
<input name="width" maxlength="4" type="text" placeholder="Width" onkeypress="return isNumberKey(event)">
<input name="height" maxlength="4" type="text" placeholder="Height" onkeypress="return isNumberKey(event)">
<input type="submit" name="download" value="Download!">
<input type="submit" name="preview" value="Preview!">
</form>
如您所见,它引用了第一个链接上的GIFEncoder类。它还使用了一些javascript验证和jQuery multiupload。
顺便说一句,这个问题已经被问到了。
答案 1 :(得分:2)
在Google上搜索,发现在http://www.phpclasses.org/package/3163-PHP-Generate-GIF-animations-from-a-set-of-GIF-images.html发现了GIFEncoder.class.php 此链接需要注册。
所以我搜索了一下,它包含在code.google.com上的phpvideotoolkit中,可以在以下位置下载:
http://phpvideotoolkit.googlecode.com/svn-history/r6/trunk/phpvideotoolkit/adapters/ffmpeg-php/gifencoder/GIFEncoder.class.php
还有一个修复错误的版本只需将文件名更改为上述链接中的GIFEncoder.class.phpvideotoolkit.php。
我自己没有尝试过,但也许它可以帮助你。
code.google.com上php文件的父目录中的也是一个例子
祝你好运答案 2 :(得分:0)
与PHP捆绑在一起的AFAIK gd lib不支持创建动画GIF。您可以使用gifsicle。