C# (江湖小新)- 几行代码写个GIF图片生成器
2023-09-11 14:14:49 时间
效果
程序分析
-
本次需要使用到第三方开源工具库 AnimatedGif
-
AnimatedGif 是 github上的一个开源项目, 地址是:https://github.com/mrousavy/AnimatedGif
-
使用也非常方便,以下代码即可:
-
using (var gif = AnimatedGif.Create("mygif.gif", 33)) { var img = Image.FromFile("myimage.png"); gif.AddFrame(img, delay: -1, quality: GifQuality.Bit8); }
-
-
使用之前需要先在 vs中安装,本文采用 Nuget 方式安装 ,步骤如下:
-
选中项目右键——》管理Nuget程序包
-
输入 AnimatedGif,搜索安装即可,安装后重新启动VS
-
-
界面布局
-
一个Button按钮,选择要生成为GIF的源图片,支持多选
-
一个textBox输入框,用来输入播放的延迟时长,单位ms(毫秒)
-
一个ListBox,用来显示生成结果及存放路径
-
两个label控件,显示描述文案
-
程序逻辑及代码
Button按钮
-
打开电脑选择本地图片原文件,支持多选
-
选完点击确定逻辑:
-
清空listbox中的文案
-
显示文案,开始生成gif图片
-
生成gif图片
-
显示文案,结束生成gif图片
-
private void button1_Click(object sender, EventArgs e)
{
// 导入图片文件
OpenFileDialog ofd = new OpenFileDialog();
//设置初始打开目录
ofd.InitialDirectory = @"D:\";
ofd.Title = "请选择您的图片文件";
ofd.Filter = "图片文件|*.jpg;*.png;";
//打开文件多选
ofd.Multiselect = true;
// 点击确定的时候,将音乐导入列表
if (ofd.ShowDialog() == DialogResult.OK)
{
// 先清空
this.listBox1.Items.Clear();
this.listBox1.Items.Add("开始生成gif文件......");
// 生成gif图片
GeneraterGif(ofd.FileNames);
this.listBox1.Items.Add("结束生成gif文件......\r\n");
}
}
生成gif代码
private void GeneraterGif(string[] imgList)
{
if(imgList == null)
{
return;
}
// 播放延迟,默认设置为 300ms
int delay = 300;
// 获取文件目录作为 生成文件存放目录
string filePath = GetFolderPath(imgList[0]);
string resultFilePath = filePath + "\\result.gif";
this.listBox1.Items.Add("生成结果文件存在目录是:"+ resultFilePath);
// "mygif.gif"使用文件名和33帧间延迟毫秒 (~30fps)创建 GIF 。将16ms 用于 60fps 等。
using (var gif = AnimatedGif.AnimatedGif.Create(resultFilePath, delay))
{
foreach (string imgPath in imgList)
{
var img = Image.FromFile(imgPath);
gif.AddFrame(img, delay: delay, quality: GifQuality.Bit8);
}
}
}
获取最终文件存放目录
private string GetFolderPath(string filePath)
{
int index = filePath.LastIndexOf('\\');
return filePath.Substring(0, index);
}
更多**好看的内容**和**好玩的案例**请关注**我的微信公众号: 程序猿知秋**
相关文章
- Win10系列:C#应用控件基础13
- C#项目代码规范
- 编写高质量代码改善C#程序的157个建议[勿选List<T>做基类、迭代器是只读的、慎用集合可写属性]
- 编写高质量代码改善C#程序的157个建议[泛型集合、选择集合、集合的安全]
- asp.net C#生成和解析二维码代码
- 重新整理数据结构与算法(c#系列)—— 树的前中后序遍历[十六]
- c# 优化代码的一些规则——优先隐式类型[一]
- C#与Java对比学习:类型判断、类与接口继承、代码规范与编码习惯、常量定义
- C# 代码实现设置用户"NETWORK SERVICE"具有对文件夹的读取权限。
- 在C#代码中应用Log4Net(一)简单使用Log4Net
- c# 优化代码的一些规则——字符串使用优化[四]
- c# 优化代码的一些规则——const 和 readonly[二]
- C# DataSet.RejectChanges 方法
- C# 鸡尾酒排序(双冒泡排序、搅拌排序或涟漪排序)
- C# 加密小工具代码实现
- C#-gdi绘图,双缓冲绘图,Paint事件的触发
- 【C#代码实战】群蚁算法理论与实践全攻略——旅行商等路径优化问题的新方法
- atitit.木马病毒webshell的原理and设计 java c# .net php.
- C# WinForm程序的App.Config数据库连接配置文件
- c# 即使服务又是可执行程序的代码实现
- c# 读取照片EXIF信息
- 用C表达面向对象语言的机制——C#版
- C#委托的用法【详细】
- C# pictureBox.Image获得图片的三种方法