zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C# (江湖小新)- 几行代码写个GIF图片生成器

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);
}

更多**好看的内容**和**好玩的案例**请关注**我的微信公众号: 程序猿知秋**