回答
使用预先包装在PHP中的标准GD函数是不可能的。
这里有一个class on phpclasses.org。我从来没有使用它,但它被很多其他软件包使用。
或者,如果您有权访问来自PHP的ImageMagick,使用MagickWand库或命令行,请使用它。借助ImageMagick,这不成问题。
这不能与GD做,但我发现了一个伟大的图书馆吧。这虽然有点复杂,但是这里有一个连接到使用php制作动画GIF的库的链接。它解释了如何彻底使用它。 http://www.phpclasses.org/package/3163-PHP-Generate-GIF-animations-from-a-set-of-GIF-images.html
选择2张图片并写入宽度和高度为900的速度为900。它会将它们放入动画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。
注意:这个问题已经被问到。
有关更好的,快速和更近期的解决方案,请参阅this SO answer。
对于一个更近期的解决方案,here is my fork它,有一些小的修复&的改进。从实际应用中它的一个例子:
$anim = new GifCreator\AnimGif();
$gif = $anim->create($image_files);
//file_put_contents("test.gif", $gif);
header("Content-type: image/gif");
echo $gif;
(需要PHP5.3与GD2。)
实施例与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;
这不适用于我的(PHP5.6与GD2.4.11)。只是给了我'形象'...“无法显示,因为它包含错误。”# – 2017-12-06 20:17:59
@ ban-geoengineering,感谢您指出了这一点(好吧,任何事情都可能,因为PHP5.6当时并不存在)。一个可能的修复程序刚刚合并到代码中在那里;请重试,如果问题仍然存在,请向GitHub的项目提交问题,以便它可以在那里正确解决问题 – 2017-12-07 18:52:04
感谢您的支持,刚刚使用工作代码片段更新了您的答案。 – 2017-12-12 00:16:46
- 1. 从.jpeg/png创建一个动画.gif
- 2. PHP Imagick创建GIF动画
- 3. 从CSS3动画SVG创建动画GIF
- 4. 使用2张图像创建动画
- 5. 创建GIF动画
- 6. 如何在单个步骤中创建动画GIF图像?
- 7. 使用C#从二进制数据创建动画gif图像
- 8. 使用GPU从多个JPG图像创建GIF动画
- 9. 使用ffmpeg从jpeg图像生成gif
- 10. PHP GD图像 - 输出动画GIF
- 11. 带有PHP动画GIF图像
- 12. 从多图像(动画)GIF文件显示单个图像
- 13. 从2张图像创建图像
- 14. 扩张APK创建一个从图像动画
- 15. WinRT创建动画GIF
- 16. 从画布创建图像
- 17. jquery创建简单的图像幻灯片动画 - 淡入和淡出图像
- 18. JavaFx - 从图像数组创建动画
- 19. 使用GD库创建动画gif
- 20. 创建2d动画的简单工具?
- 21. 如何创建这样的动画gif?
- 22. 带动画gif的IOS UIButton图像
- 23. 动画JPanel上的.GIF图像
- 24. 下载Java中的动画gif图像
- 25. NSImageView中的动画GIF图像
- 26. 两个图像之间的简单变形动画
- 27. PHP覆盖JPEG上的GIF
- 28. 从jpeg创建位图
- 29. 使用ImageIO创建GIF动画?
- 30. 如何在Java中创建动画gif?
** phpclasses.org **代码是访问的恶梦,输入文件必须是GIF文件。它不适用于JPEG文件...: -/ – 2017-12-06 20:45:00
您可以使用此答案将输入的JPEG图像转换为(静态)GIF图像,并将其转换为另一个SO问题:https://stackoverflow.com/a/755843/1617737 – 2017-12-06 21:17:23