2010-05-17 25 views

Respuesta

26

Here's an article about how to determine the number of frames in a GIF animation.

Image i = Image.FromFile(Server.MapPath("AnimatedGIF.gif")); 

Imaging.FrameDimension FrameDimensions = 
    new Imaging.FrameDimension(i.FrameDimensionsList[0]); 

int frames = i.GetFrameCount(FrameDimensions); 

if (frames > 1) 
    Response.Write("Image is an animated GIF with " + frames + " frames"); 
else 
    Response.Write("Image is not an animated GIF."); 

Y supongo que usted podría compararlo con 1.

+2

+1 artículo Hardcore en una pequeña fuente! ¿Podría pegar un fragmento del código aquí y vincularlo también al artículo? De modo que si la página o el sitio se elimina la respuesta no se pierde. – amelvin

+0

@amelvin: buena idea. veo que jeff ya lo ha hecho, ahora =) @jeff atwood: ¡accesorios para cambiar los nombres de variables a convenciones! –

+2

Gracias por agregar el código aquí, el sitio web ya no está disponible. – flayn

1

Wikipedia tiene alguna información sobre el diseño de un GIF animado en comparación con una estática.

un archivo GIF animado comprende una serie de imágenes o fotogramas que se mostrará sucesivamente, cada uno descrito por su propia CME (Extensión de Control Gráfico), precedida por una cabecera cuyo contenido por defecto se aplica a todos los marcos. Después del encabezado, los datos están orientados a la transmisión en lugar de estar en índices fijos, por lo que la ubicación del inicio de una GCE depende de la longitud de la (s) GCE (s) anterior (es).

5

System.Drawing.ImageAnimator.CanAnimate ha estado disponible desde .NET 1.1.

De MSDN:

devuelve un valor booleano que indica si la imagen especificada contiene marcos basados ​​en el tiempo.

Ejemplo:

using (Image image = Image.FromFile("somefile.gif")) 
{ 
    if (ImageAnimator.CanAnimate(image)) 
    { 
     // GIF is animated 
    } 
    else 
    { 
     // GIF is not animated 
    } 
} 
Cuestiones relacionadas