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.");
И я полагаю, вы могли бы просто сравнить это с 1.
Ответ 2
System.Drawing.ImageAnimator.CanAnimate доступен с .NET 1.1.
Возвращает логическое значение, указывающее, содержит ли указанное изображение временные кадры.
Пример:
using (Image image = Image.FromFile("somefile.gif"))
{
if (ImageAnimator.CanAnimate(image))
{
// GIF is animated
}
else
{
// GIF is not animated
}
}
Ответ 3
Wikipedia содержит некоторую информацию о макете анимированного GIF по сравнению со статическим.
Анимированный GIF файл содержит несколько изображений или кадров, которые будут отображаться последовательно, каждый из которых описывается собственным GCE (расширение графического контроля), которому предшествует заголовок, содержимое которого по умолчанию применяется ко всем кадрам. После заголовка данные ориентированы на поток, а не на фиксированные индексы, поэтому местоположение начала GCE зависит от длины предыдущих GCE (s).