简单单单 发表于 2019-5-7 11:00

【C#】GIF软件-可逐帧查看GIF中的图片和图片压缩功能

本帖最后由 简单单单 于 2019-5-14 16:45 编辑

软件主要功能:
一:两种代码压缩功能
二:逐帧查看GIF中的图片
三:自定义倍速播放GIF(添加倒放功能)

2019.05.14 修复部分BUG 并添加倒放功能
软件编译大小23kb,VS2015编译,WinGifTool\bin\Debug下WinGifTool.exe可直接运行使用
拖入图片即可显示图片总帧数
软件窗体可放大,如果gif大小显示不全,放大程序窗体再点击预览或者播放即可

代码其实没什么,参考网上资料,做这个软件主要是很小巧的实现看GIF某些帧的图片,不用打开PS才能看
压缩功能可能有噪点

/// <summary>
      /// 获取指定帧数的图片
      /// </summary>
      /// <param name="path"></param>
      /// <param name="index"></param>
      /// <returns></returns>
      private Image GetImg(string path, int index)
      {
            Image res = Image.FromFile(path);
            int width = res.Width;
            int height = res.Height;
            Image gif = new Bitmap(width, height);
            Image frame = new Bitmap(width, height);
            Graphics g = Graphics.FromImage(gif);
            Rectangle rg = new Rectangle(0, 0, width, height);
            Graphics gFrame = Graphics.FromImage(frame);
            int forIndex = 0;
            foreach (Guid gd in res.FrameDimensionsList)
            {
                FrameDimension fd = new FrameDimension(gd);

                //因为是缩小GIF文件所以这里要设置为Time,如果是TIFF这里要设置为PAGE,因为GIF以时间分割,TIFF为页分割
                FrameDimension f = FrameDimension.Time;
                int count = res.GetFrameCount(fd);
                //ImageCodecInfo codecInfo = GetEncoder(ImageFormat.Gif);
                //System.Drawing.Imaging.Encoder encoder = System.Drawing.Imaging.Encoder.SaveFlag;
                //EncoderParameters eps = null;

                for (int i = 0; i < count; i++)
                {
                  res.SelectActiveFrame(f, i);
                  if (0 == i)
                  {
                        if (forIndex == index)
                        {
                            g.DrawImage(res, rg);
                            bindProperty(res, gif);
                            return gif;
                        }
                        //gif.Save(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"/" + Path.GetFileName(path).Replace(".", DateTime.Now.ToString("yyMMddHHmmssfff") + "."), codecInfo, eps);
                  }
                  else
                  {
                        if (forIndex == index)
                        {
                            gFrame.DrawImage(res, rg);
                            bindProperty(res, frame);
                            return frame;
                        }
                        //gif.SaveAdd(frame, eps);
                  }
                  forIndex++;
                }

                //eps = new EncoderParameters(1);
                //eps.Param = new EncoderParameter(encoder, (long)EncoderValue.Flush);
                //gif.SaveAdd(eps);
            }
            //MessageBox.Show("缩放完成!");
            res.Dispose();
            return null;
      }
蓝奏云无密码
https://www.lanzouj.com/i45l3zi


没有编译环境的同学WinGifTool\bin\Debug下WinGifTool.exe可直接运行使用




990721830 发表于 2019-11-1 00:35

简单单单 发表于 2019-10-27 15:16
如果是Gifsicle压缩我另一个帖子应该已经实现了
https://www.52pojie.cn/thread-955905-1-1.html
你先 ...

但是好像没有和ezgif网上一样的...
自定义调画质...
只有自动压缩...

还有不知能否做到按照自定义设置大小lossygif算法压制...

简单单单 发表于 2019-10-27 15:16

990721830 发表于 2019-10-2 04:13
https://ezgif.com/optimize
能加入这个里面的优化算法吗?
或者可以用右键文件发送到这个页面...


如果是Gifsicle压缩我另一个帖子应该已经实现了
https://www.52pojie.cn/thread-955905-1-1.html
你先看下

hnicypb 发表于 2019-5-7 11:19

貌似还不错,收藏了,备用,谢谢

二两酒 发表于 2019-5-7 11:25

感谢分享,支持原创!

jettang 发表于 2019-5-7 11:26

这东东不错,之前帮人P过gif,需要这样的好工具

安倚静轩 发表于 2019-5-7 11:43

可以用到

骨质乌过木 发表于 2019-5-7 11:57

简单单单 发表于 2019-5-7 12:27

骨质乌过木 发表于 2019-5-7 11:57
有成品吗楼主@简单单单

你把附件下载下,这个路径看能直接运行不
WinGifTool\bin\Debug\WinGifTool.exe
不行的话我再补连接

东风破浪 发表于 2019-5-7 15:25

没用过。支持楼主一下。

L__ 发表于 2019-5-7 16:36

感谢分享这么好的工具

tosm 发表于 2019-5-9 09:27

收藏,感谢。
页: [1] 2 3
查看完整版本: 【C#】GIF软件-可逐帧查看GIF中的图片和图片压缩功能