分享

C# 合并多张图片为GIF动态图

 Csharp小记 2023-10-29 发布于江苏

文章描述:在前一篇写了如何将一张GIF动态图分解成一帧一帧的图片,这一篇我们就把喝进去的一瓢水给还回去。即把一张又一张的图片去拼合成一张GIF动态图。

这里我们使用的是上一篇分割下来的每一帧图片,然后来进行一个还原操作,其实下面的代码中,能做到也不仅仅是还原,还可以同时设置延迟间隔等一些属性,也就是对这张动态图进行慢放或者快放的操作。


开发环境:.NET Framework版本:4.5

开发工具: Visual Studio 2013

实现代码:

 string newPath = Application.StartupPath + "\\new.gif";        public Form1()        {            InitializeComponent();            textBox1.Text = Application.StartupPath + "\\images\\";        }
private void btn_merge_Click(object sender, EventArgs e) { List<string> imgs = Directory.GetFiles(textBox1.Text, "*.jpg").ToList(); imgs.Sort((a, b) => { string reg = "[0-9]+"; int a_index = int.Parse(Regex.Match(a, reg).Value); int b_index = int.Parse(Regex.Match(b, reg).Value); return a_index > b_index ? 1 : a_index < b_index ? -1 : 0; }); AnimatedGifEncoder ae = new AnimatedGifEncoder(); ae.Start(newPath); ae.SetDelay(120); // 延迟间隔 ae.SetRepeat(0); //-1:不循环,0:循环播放 for (int i = 0; i < imgs.Count; i++) { ae.AddFrame(Image.FromFile(imgs[i])); } ae.Finish(); MessageBox.Show("处理完成,请点击预览查看"); }
private void btn_preview_Click(object sender, EventArgs e) { Image img = Image.FromFile(newPath); lb_img.Image = img; }

实现效果:

代码解析:看代码是不是又是挺简单的?又是几行代码?其实不然,这里使用到了一套开源的代码(AnimatedGif还是什么来着,年代有点久远,记不太清了,只知道代码里面是这么写的,应该根据这个关键词时可以搜索到的),不过也全是c#代码写的,但是太多就没放到文章中来。

在上一篇中,进行GIF动态图片分割的时候,可以看到对每一张图片保存命名的时候进行了编号,所以这里合成的时候,就要按照编号(帧)排序再合成(由于我命名时加了其他字符串,所以这里又用正则处理了下),这里注意一定不能乱排,否则图片播放器来不太连贯。当然你需求就是一张张无序播放的话,倒是无所谓。

所有源代码均会上传并持续更新,如有需要

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多