有这么个需求,想把gif图片分解成多张png序列帧图片,之前用的是Ulead GIF Animator 5,然后现在过期了,不太想找绿色版,查看api之后,还是直接上来撸一段代码,在gif的同级目录下生成一个与gif同名的文件夹,把.png序列图保存在里面。
/// <summary>
/// gif导出png序列帧
/// </summary>
/// <param name="gifPath"></param>
public static void ExportToPngList(string gifPath)
{
Image img = Image.FromFile(gifPath);
FrameDimension frameDimension = new FrameDimension(img.FrameDimensionsList[0]);
var frameCount = img.GetFrameCount(frameDimension);
string fileName = Path.GetFileNameWithoutExtension(gifPath);
string dir = Path.GetDirectoryName(gifPath) + "/" + fileName;
if (!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
}
for (int i = 0; i < frameCount; i++)
{
img.SelectActiveFrame(frameDimension, i);
string savePath = $"{dir}/{fileName}_{i}.png";
img.Save(savePath, ImageFormat.Png);
}
}