有谁知道是否可以从两个不同的JPEG文件生成动画GIF,显示一个图像x秒然后另一个,依此类推......?
任何建议表示赞赏
谢谢。
有谁知道是否可以从两个不同的JPEG文件生成动画GIF,显示一个图像x秒然后另一个,依此类推......?
任何建议表示赞赏
谢谢。
使用预装PHP的标准GD功能是不可能的。
有一个 phpclasses.org上的课程 为了这。我自己从来没有使用它,但它被许多其他软件包使用。
或者,如果您有权访问 ImageMagick的 从PHP,使用任何一个 MagickWand 库或命令行,使用它。使用ImageMagick,没问题。
ImageMagick v6动画基础知识 (来自IM手册)
使用预装PHP的标准GD功能是不可能的。
有一个 phpclasses.org上的课程 为了这。我自己从来没有使用它,但它被许多其他软件包使用。
或者,如果您有权访问 ImageMagick的 从PHP,使用任何一个 MagickWand 库或命令行,使用它。使用ImageMagick,没问题。
ImageMagick v6动画基础知识 (来自IM手册)
有关一个不错的,快速的和最新的解决方案,请参阅 这个答案。
对于更新的解决方案, 这是我的叉子 它,有一些小的修复和改进。来自实际应用的一个例子:
$anim = new GifCreator\AnimGif();
$gif = $anim->create($image_files);
//file_put_contents("test.gif", $gif);
header("Content-type: image/gif");
echo $gif;
(GD2需要PHP5.3。)
适用于PHP 5.6和GD 2.4.11的示例:
require_once "AnimGif.php";
/*
* Create an array containing file paths, resource var (initialized with imagecreatefromXXX),
* image URLs or even binary code from image files.
* All sorted in order to appear.
*/
$image_files = array(
//imagecreatefrompng("/../images/pic1.png"), // Resource var
//"/../images/pic2.png", // Image file path
//file_get_contents("/../images/pic3.jpg"), // Binary source code
'https://yt3.ggpht.com/-KxeE9Hu93eE/AAAAAAAAAAI/AAAAAAAAAAA/D-DB1Umuimk/s100-c-k-no-mo-rj-c0xffffff/photo.jpg', // URL
'https://media.licdn.com/mpr/mpr/shrinknp_100_100/AAEAAQAAAAAAAAloAAAAJDRkZGY2MWZmLTM1NDYtNDBhOS04MjYwLWNkM2UzYjdiZGZmMA.png', // URL
'http://is5.mzstatic.com/image/thumb/Purple128/v4/e4/63/e7/e463e779-e6d0-0c3d-3ec1-97fdbaae230a/source/100x100bb.jpg' // URL
);
/*
* Create an array containing the duration (in millisecond) of each frame.
*/
$durations_millis = array(
1000,
2000,
3000
);
/*
* Fix durations.
*/
$durations = array();
for ($i = 0; $i < count($durations_millis); $i++) {
$durations[$i] = $durations_millis[$i] / 10;
}
/*
* Specify number of loops. (0 = infinite looping.)
*/
$num_loops = 0;
/*
* Create gif object.
*/
$anim_gif = new GifCreator\AnimGif();
$gif_object = $anim_gif->create($image_files, $durations, $num_loops);
/*
* Get the animated GIF binary.
*/
$gif_binary = $gif_object->get();
/*
* Set the file name of the saved/returned animated GIF.
*/
$file_name = "animated.gif";
/*
* Optionally, save animated GIF in a folder as a GIF:
*/
//file_put_contents($file_name, $gif_binary);
/*
* Optionally, return the animated GIF to client.
*/
header("Content-type: image/gif");
header('Content-Disposition: filename="' . $file_name . '"'); // Optional
echo $gif_binary;
/*
* All done.
*/
exit;
这不能用GD完成,但我找到了一个很棒的库。虽然它有点复杂,所以这里有一个链接到库,用PHP制作动画GIF。它解释了如何彻底使用它。 http://www.phpclasses.org/package/3163-PHP-Generate-GIF-animations-from-a-set-of-GIF-images.html
选择2张图片,并为宽度和高度写入速度900的100。它将把它们放在动画GIF幻灯片中。
以下是该脚本的代码:
<?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。
注意:这个问题已经被问到了。