|
|
|
|
|
для: Trianon
(16.02.2006 в 17:13)
| | ОГРОМНОЕ СПАСИБО!!! :-)
Все работает! | |
|
|
|
|
|
|
|
для: Artemy
(16.02.2006 в 17:10)
| | У меня честно пишет Total frames: 3
То бишь в GIFе всего три кадра. | |
|
|
|
|
|
|
|
для: Trianon
(16.02.2006 в 17:06)
| | Попробуйте этот вариант.
<?php
function getstr(&$strm, $len = 1)
{ $v = substr($strm, 0, $len); $strm = substr($strm, $len); return $v; }
function getvstr(&$strm) { return getstr($strm, getbyte($strm)); }
function getbyte(&$strm) { return ord(getstr($strm,1)); }
function getword(&$strm) {$a = getbyte($strm); return $a + (getbyte($strm) << 8); }//>>
function get_localscreendescriptor(&$strm)
{
$lsd0 = getstr($strm, 7);
$pkd = ord($lsd0{4}); $gctf = 1&($pkd >>7); $gcts = 3<< (1+($pkd&7)); // >>
$lsd = array('info' => $lsd0);
if($gctf)
$lsd['colors'] = getstr($strm, $gcts);
return $lsd;
}
function get_imagedescriptor(&$strm)
{ // assume 2C introducer already read
$imd0 = getstr($strm, 9);
$pkd = ord($imd0{8}); $lctf = 1&($pkd >>7); $lcts = 3<< (1+($pkd&7)); //>>
$imd = array('info' => $imd0);
if($lctf)
$imd['colors'] = getstr($strm, $lcts);
return $imd;
}
function get_gif(&$strm)
{
$g = array();
$g['frames'] = 0;
$g['head'] = array('type'=>getstr($strm, 3), 'version' =>getstr($strm, 3)) ;
$g['lsd'] = get_localscreendescriptor($strm);
$g['stream']= array();
$last_block;
while(($id= getbyte($strm)) != 0)
{
$blk = array('id'=> sprintf("%02X",$id));
switch($id)
{
case 0x3B: break;
case 0x2C: $g['frames']++;;
$blks = array();
$blk['imd'] = get_imagedescriptor($strm, $blk);
$blk['minLZW'] = getbyte($strm);
while(strlen($blks[]=getvstr($strm))!= 0) ;
$blk['chunks']=$blks;
break;
case 0x21:
$block = getbyte($strm);
$blks = array('sub_id' => sprintf("%02X",$block), 'rec' => array());
while(strlen($blks['rec'][] = getvstr($strm)) != 0) ;
$blk['ext'] = $blks;
break;
}
$g['stream'][] = $blk;
}
return $g;
}
$gif1 = @file_get_contents("example.gif");
$gif = get_gif($gif1);
echo "Total frames: ".$gif['frames']."<br>\r\n";
?>
|
| |
|
|
|
|
 37.8 Кб |
|
|
для: Trianon
(16.02.2006 в 17:06)
| | Вауля! :) | |
|
|
|
|
|
|
|
для: Artemy
(16.02.2006 в 16:50)
| | Я имел в виду - прикрепить сам gif-файл, а не отчет скрипта. :))) | |
|
|
|
|
|
|
|
для: Trianon
(16.02.2006 в 16:47)
| | Прикрепил! | |
|
|
|
|
|
|
|
для: Artemy
(16.02.2006 в 16:32)
| | А какие элементы там нашлись?
Прикрепите, пожалуйста, этот gif к ответу. Я его гляну. | |
|
|
|
|
|
|
|
для: Trianon
(16.02.2006 в 15:33)
| | хм...Я пробовал анимированным гифом провести "такого рода махинации", который состоит из трех кадров. И я не нашел там такого элемента - stream. | |
|
|
|
|
|
|
|
для: Artemy
(16.02.2006 в 15:30)
| | Если их два и более - значит GIF содержит 2 и более кадра. Значит GIF анимирован. Если только один - значит обычная картинка.
Вы же это хотели выяснить?
PS В принципе, после обнаружения второго такого дескриптора анализ можно было бы и прервать. Можно также не собирать графические данные(chunks) и данные блоков расширения (rec). | |
|
|
|
|
|
|
|
для: Trianon
(16.02.2006 в 15:03)
| | Большое Вам спасибо!
А что делать с этими дискрипторами? | |
|
|
|
|