西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
西西首頁 電腦軟件 安卓軟件 電腦游戲 安卓游戲 排行榜 專題合集

GIF反轉(zhuǎn)工具

v1.0 綠色版
  • GIF反轉(zhuǎn)工具v1.0 綠色版
  • 軟件大小:1M
  • 更新時間:2013-12-19 15:08
  • 軟件語言:中文
  • 軟件廠商:
  • 軟件類別:國產(chǎn)軟件 / 免費(fèi)軟件 / 圖像處理
  • 軟件等級:4級
  • 應(yīng)用平臺:WinAll, Win7
  • 官方網(wǎng)站:暫無
  • 應(yīng)用備案:
好評:50%
壞評:50%

軟件介紹

首先看下效果圖:

然后是兩張gif的對比
//原本圖是正著走的
//處理后是倒著走的

gif是動態(tài)的嘛。然后我昨天和一個朋友聊天的時候發(fā)了一串相同的gif圖,然后看著千篇一律的東西。我想能不能寫個程序?qū)崿F(xiàn)gif的初始狀態(tài)不同呢。什么意思呢。我們知道,gif是由幀構(gòu)成的,我想實(shí)現(xiàn)的功能是比如一個gif共有十幀,那么我寫出來的程序能夠生成10個gif文件,分別對應(yīng)不同的初始狀態(tài)來進(jìn)行循環(huán)。后來一想,gif幀太多的話,比較慢,而且也不實(shí)用,于是決定簡化一下,只做一個反轉(zhuǎn)工具,比如一個gif是從左到右播放的,通過這個成功可以生成一個相同的gif圖,不過是倒著播放的。

思路很簡單,就是先把gif分解成很多幀,然后對幀進(jìn)行合并,合并幀之前把幀的位置反轉(zhuǎn)一下就可以了。因?yàn)槲易约簩D像處理的知識不懂,只想到了思路,所以這些功能都要找些資料,然后修改,測試。

分割幀的代碼如下

 //解碼gif圖片
        public List<string> GetFrames(stringpPath,stringpSavedPath)
        {
            Image gif=Image.FromFile(pPath);
            FrameDimension fd=newFrameDimension(gif.FrameDimensionsList[0]); 
            //獲取幀數(shù)(gif圖片可能包含多幀,其它格式圖片一般僅一幀)
            intcount=gif.GetFrameCount(fd);
            List<string>gifList=newList<string>();            //以Jpeg格式保存各幀
 
            for(inti=0;i<count;i++)
              {
                  gif.SelectActiveFrame(fd,i);
                  gif.Save(pSavedPath+"\\frame_"+i+".png",ImageFormat.Png);
                  gifList.Add(pSavedPath+"\\frame_"+i+".png");
              }
            returngifList;
         }

可以看到,返回了一個包含所有生成的幀地址的list列表。然后就是使用gifList作為參數(shù)來合并了。

//獲取系統(tǒng)臨時目錄存放解碼后的png圖片\r\n
                stringtemppath=System.Environment.GetEnvironmentVariable("TEMP");
 
                List<string>gifList=GetFrames(tBoxFile.Text,temppath);
                gifList.Reverse();
                StringoutputFilePath="new.gif";
                AnimatedGifEncoder ae=newAnimatedGifEncoder();
                ae.Start(outputFilePath);
                ae.SetDelay(100);    // 延遲間隔\r\n
                ae.SetRepeat(0);  //-1:不循環(huán),0:總是循環(huán) 播放  \r\n
                for(inti=0,count=gifList.Count;i<count;i++)
                {
                    ae.AddFrame(Image.FromFile(gifList[i]));
                }
                ae.Finish();
                MessageBox.Show("成功!新文件已保存在同目錄");

這里面使用了AnimatedGifEncoder這個類,這是Gif.Components.dll動態(tài)連接庫里的類(此庫開源,文末給出地址),是我在codeProject上找到的。首先我把gifList反轉(zhuǎn),然后合并保存到同目錄。中間生成的幀為了方便我保存到了temp目錄。

本來這個庫里是分割gif的功能的。但是我實(shí)際測試后發(fā)現(xiàn)效果非常差,圖片黑條泛濫,根本沒法看。所以還是使用上面那段代碼,相關(guān)代碼我依然保存在工程里,有興趣可以自己測試。

軟件標(biāo)簽: GIF

其他版本下載

最新評論查看所有(1)條評論 >

第 1 樓 黑龍江哈爾濱黑龍江中醫(yī)藥大學(xué) 網(wǎng)友 客人 2014/7/5 10:22:51
好工具!

支持( 0 ) 蓋樓(回復(fù))

發(fā)表評論

昵稱:
表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
查看所有(1)條評論 > 字?jǐn)?shù): 0/500

TOP
軟件下載