2009-08-25 92 views

回答

0

我不知道有什麼辦法可以在客戶端進行,但我不確定。你可以做的是解析服務器端的HTML代碼和任何引用的gif,併爲這些圖像添加一個類。但這並不是真正的建議,因爲它至少包含一個附加的HTML +解析每個gif的解析。從this example in PHP可以看出,檢查gif在CPU負載方面也不是微不足道的。

+0

我渣油同意,我不認爲有任何方式的JavaScript – Josh 2009-08-25 19:26:52

+0

我認爲要做到這一點,或許真的是可能的帆布的API。只需每x毫秒對圖像進行一次採樣,然後計算圖像的散列值。不太可靠,但它可以工作... – doekman 2009-08-27 13:40:34

14

我剛剛寫了一些檢測動畫gif的JS。適用於除IE 9以外的大多數新型瀏覽器。

聲明:僅當圖像的域名起源與您正在從中加載腳本的頁面相同時,纔有效。

請參閱最新版本的代碼的要點:https://gist.github.com/3012623

function isAnimatedGif(src, cb) { 
    var request = new XMLHttpRequest(); 
    request.open('GET', src, true); 
    request.responseType = 'arraybuffer'; 
    request.addEventListener('load', function() { 
     var arr = new Uint8Array(request.response), 
      i, len, length = arr.length, frames = 0; 

     // make sure it's a gif (GIF8) 
     if (arr[0] !== 0x47 || arr[1] !== 0x49 || 
      arr[2] !== 0x46 || arr[3] !== 0x38) 
     { 
      cb(false); 
      return; 
     } 

     //ported from php http://www.php.net/manual/en/function.imagecreatefromgif.php#104473 
     //an animated gif contains multiple "frames", with each frame having a 
     //header made up of: 
     // * a static 4-byte sequence (\x00\x21\xF9\x04) 
     // * 4 variable bytes 
     // * a static 2-byte sequence (\x00\x2C) (some variants may use \x00\x21 ?) 
     // We read through the file til we reach the end of the file, or we've found 
     // at least 2 frame headers 
     for (i=0, len = length - 9; i < len, frames < 2; ++i) { 
      if (arr[i] === 0x00 && arr[i+1] === 0x21 && 
       arr[i+2] === 0xF9 && arr[i+3] === 0x04 && 
       arr[i+8] === 0x00 && 
       (arr[i+9] === 0x2C || arr[i+9] === 0x21)) 
      { 
       frames++; 
      } 
     } 

     // if frame count > 1, it's animated 
     cb(frames > 1); 
    }); 
    request.send(); 
} 
+0

如果所有幀都具有相同的數據會怎麼樣?然後,gif將被檢測爲動畫,而實際上它不是。一個萬無一失(但更昂貴)的解決方案是實際比較幀數據,直到找到兩個實際不同的幀數據。 – Gautam 2015-03-13 11:06:36

+0

好點@Gautam如果你願意,我會很樂意看到一個實現! – lakenen 2015-03-13 19:19:24

+0

哈哈,不要屏住呼吸:) 這意味着有人想考慮使用此功能的人考慮。我不會預見自己很快會實施它... – Gautam 2015-03-16 07:57:33

相關問題