Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Проверка GIF - рисунка на анимацию

Сообщения:  [1-10]   [11-18] 

 
 автор: Artemy   (16.02.2006 в 17:19)   письмо автору
 
   для: Trianon   (16.02.2006 в 17:13)
 

ОГРОМНОЕ СПАСИБО!!! :-)

Все работает!

   
 
 автор: Trianon   (16.02.2006 в 17:16)   письмо автору
 
   для: Artemy   (16.02.2006 в 17:10)
 

У меня честно пишет Total frames: 3
То бишь в GIFе всего три кадра.

   
 
 автор: Trianon   (16.02.2006 в 17:13)   письмо автору
 
   для: Trianon   (16.02.2006 в 17:06)
 

Попробуйте этот вариант.
<?php
   
function getstr(&$strm$len 1)
   {  
$v substr($strm0$len); $strm substr($strm$len); return $v;   }
   function 
getvstr(&$strm) { return getstr($strmgetbyte($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($strm7);
       
$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($strm9);
       
$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($strm3), 'version' =>getstr($strm3)) ;
       
$g['lsd'] = get_localscreendescriptor($strm);
       
$g['stream']= array();
       
$last_block;
       while((
$idgetbyte($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";
?>

   
 
 автор: Artemy   (16.02.2006 в 17:10)   письмо автору
37.8 Кб
 
   для: Trianon   (16.02.2006 в 17:06)
 

Вауля! :)

   
 
 автор: Trianon   (16.02.2006 в 17:06)   письмо автору
 
   для: Artemy   (16.02.2006 в 16:50)
 

Я имел в виду - прикрепить сам gif-файл, а не отчет скрипта. :)))

   
 
 автор: Artemy   (16.02.2006 в 16:50)   письмо автору
 
   для: Trianon   (16.02.2006 в 16:47)
 

Прикрепил!

   
 
 автор: Trianon   (16.02.2006 в 16:47)   письмо автору
 
   для: Artemy   (16.02.2006 в 16:32)
 

А какие элементы там нашлись?
Прикрепите, пожалуйста, этот gif к ответу. Я его гляну.

   
 
 автор: Artemy   (16.02.2006 в 16:32)   письмо автору
 
   для: Trianon   (16.02.2006 в 15:33)
 

хм...Я пробовал анимированным гифом провести "такого рода махинации", который состоит из трех кадров. И я не нашел там такого элемента - stream.

   
 
 автор: Trianon   (16.02.2006 в 15:33)   письмо автору
 
   для: Artemy   (16.02.2006 в 15:30)
 

Если их два и более - значит GIF содержит 2 и более кадра. Значит GIF анимирован. Если только один - значит обычная картинка.
Вы же это хотели выяснить?
PS В принципе, после обнаружения второго такого дескриптора анализ можно было бы и прервать. Можно также не собирать графические данные(chunks) и данные блоков расширения (rec).

   
 
 автор: Artemy   (16.02.2006 в 15:30)   письмо автору
 
   для: Trianon   (16.02.2006 в 15:03)
 

Большое Вам спасибо!
А что делать с этими дискрипторами?

   

Сообщения:  [1-10]   [11-18] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования