Herkes böylece daha sonra diğer x saniye boyunca tek bir görüntü gösterilirken, iki farklı JPEG dosyaları bir animasyonlu GIF oluşturmak mümkün olmadığını biliyor ve mu ..?
Herhangi bir tavsiye takdir.
Teşekkürler.
PHP ile önceden paketlenmiş gelip standart GD fonksiyonları kullanarak mümkün değil.
Alternatif olarak, ImageMagick from PHP, using either the MagickWand a> kütüphane veya komut satırına erişiminiz varsa, bunu kullanın. Imagemagick ile, sorun yok.
Bu GD ile yapılamaz ama bunun için büyük bir kütüphane buldum. Gerçi biraz karmaşık olduğunu, bu nedenle burada php ile animasyonlu gif yapar kütüphanesine bir bağlantıdır. İyice nasıl kullanılacağını açıklar. http://www.phpclasses.org/package/3163-PHP-Generate-GIF-animations-from-a-set-of-GIF-images.html
2 resimleri seçmek ve genişlik ve yükseklik için hız 900 için 100 yazın. Bu bir animasyonlu gif slayt onları koyacağız.
İşte bu komut için kodu:
<?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>
Gördüğünüz gibi ilk linke bulunan GIFEncoder sınıfı başvuruyor. Ayrıca bazı javascript doğrulama ve jQuery Multiupload kullanır.
Not: Bu soru zaten istendi.
Bir güzel, hızlı ve daha yeni bir çözüm için, bkz: this SO answer.
Bir daha da yeni bir çözüm için, here is my fork o, küçük düzeltmeler ve bir dizi gelişmeler. Gerçek bir uygulamadan bunun bir örneği:
$anim = new GifCreator\AnimGif();
$gif = $anim->create($image_files);
//file_put_contents("test.gif", $gif);
header("Content-type: image/gif");
echo $gif;
(Requires PHP5.3 with GD2.)