C#實現GIF圖片反轉


首先看下效果圖:

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

gif是動態的嘛。然后我昨天和一個朋友聊天的時候發了一串相同的gif圖,然后看着千篇一律的東西。我想能不能寫個程序實現gif的初始狀態不同呢。什么意思呢。我們知道,gif是由幀構成的,我想實現的功能是比如一個gif共有十幀,那么我寫出來的程序能夠生成10個gif文件,分別對應不同的初始狀態來進行循環。后來一想,gif幀太多的話,比較慢,而且也不實用,於是決定簡化一下,只做一個反轉工具,比如一個gif是從左到右播放的,通過這個成功可以生成一個相同的gif圖,不過是倒着播放的。

思路很簡單,就是先把gif分解成很多幀,然后對幀進行合並,合並幀之前把幀的位置反轉一下就可以了。因為我自己對圖像處理的知識不懂,只想到了思路,所以這些功能都要找些資料,然后修改,測試。

分割幀的代碼如下

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

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

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

項目源碼:gif反轉工具

參考:

C#圖片處理:獲取GIF 動畫圖片中的各個幀
NGif, Animated GIF Encoder for .NET


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM