欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用Java制作字符動畫實例代碼

 更新時間:2019年05月13日 10:39:15   作者:深夜里的程序猿  
這篇文章主要給大家介紹了關(guān)于如何利用Java制作字符動畫的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

前言

今晚閑來無事,整理了一下電腦中塵封已久的舊代碼,看著那些年自己寫過的代碼,踩過的坑,頓時老淚縱橫。正當(dāng)在感嘆之際,突然發(fā)現(xiàn)在“馬克思”文件夾下出現(xiàn)了一個好玩的項目,那就是N年前剛學(xué)Java時寫的GIF轉(zhuǎn)字符動畫的小玩具,雖然是個小玩意,但是在當(dāng)時能搞點東西出來還是非常有成就感的。

正文

效果展示

原圖,某兩年半練習(xí)生

轉(zhuǎn)成字符動畫后的練習(xí)生

實現(xiàn)原理

其實字符動畫的實現(xiàn)原理比較簡單,這里我們拋開GIF,直接拿一張靜態(tài)圖片來說明。

首先我們要把原圖轉(zhuǎn)成灰度圖,這樣圖片中每個像素就只存在亮度信息0-255。

取顏色的RGB均值灰度后

接著我們可以定義需要使用的字符,每個字符對應(yīng)一段亮度范圍,比如 圖中的M,@,;等字符,接著我們就可以去遍歷替換圖片中的所有像素,慢慢的調(diào)試每個字符對應(yīng)像素的亮度范圍,調(diào)試到輸出的圖像輪轂清晰即可,這樣單張圖片的字符畫就已經(jīng)成型了。下面關(guān)鍵代碼注釋。

BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file)));
		int width = bi.getWidth();//原圖寬度
		int height = bi.getHeight();//原圖高度
		int minx = bi.getMinX();//BufferedImage 原圖 最小X坐標(biāo)
		int miny = bi.getMinY(); //BufferedImage 原圖 最小Y坐標(biāo)
		for (int i = miny; i < height; i += 8) {//遍歷圖片中的像素點,用字符判斷像素范圍來替換
			for (int j = minx; j < width; j += 8) {
				int pixel = bi.getRGB(j, i); // 下面三行代碼將一個數(shù)字轉(zhuǎn)換為RGB數(shù)字
				int red = (pixel & 0xff0000) >> 16;
				int green = (pixel & 0xff00) >> 8;
				int blue = (pixel & 0xff);
				double gray = 0.299 * red + 0.578 * green + 0.114 * blue; //圖片變灰計算公式
				char c = toChar((int) gray); //根據(jù)計算出來的gray值返回不同字符
				bufferedWriter.write(c);
			}
			bufferedWriter.newLine();
		}
		//輸出圖片

若要讀取GIF,輸出GIF,我們可以使用一些開源的包,例如animated-gif,GifDecoder等,通過這些類我們可以讀取到gif的每一幀,然后我們對每一幀的操作都跟上方的靜態(tài)圖操作是一致的。處理完每一幀之后再合成GIF輸出即可。(視頻同理)

由于完全自己處理的話,可能會有很多細(xì)節(jié)需要調(diào)整的地方,為了方便,這里推薦一個項目。Github地址:github.com/korhner/asc…  (本地下載)。使用方法:

// initialize caches
AsciiImgCache smallFontCache = AsciiImgCache.create(new Font("Courier",Font.BOLD, 6));
// initialize ssimStrategy
BestCharacterFitStrategy ssimStrategy = new StructuralSimilarityFitStrategy();

String srcFilePath = "examples/xxx.gif";
String disFilePath = "examples/xxx.gif";
int delay = 100;//ms

GifToAsciiConvert asciiConvert = new GifToAsciiConvert(smallFontCache, ssimStrategy);

asciiConvert.convertGitToAscii(srcFilePath, disFilePath, delay,0);

只需要簡單的幾行,就可以完成字符動畫的轉(zhuǎn)換,其原理跟我們上面介紹的基本一致,有興趣的同學(xué)可以自行研究。

結(jié)語

代碼除了用來工作,其實還能用在很多能讓我們開心的地方,例如寫點小工具,小游戲,幫自己或他人解決一些繁瑣的事情,這樣才能在工作多年后任然保持對代碼的那份初心,不至于被重復(fù)的工作磨滅了激情。

公眾號博文同步Github倉庫,有興趣的朋友可以幫忙給個Star哦,碼字不易,感謝支持。
github.com/PeppaLittle… (本地下載

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Spring?MVC DispatcherServlet處理請求過程示例詳解

    Spring?MVC DispatcherServlet處理請求過程示例詳解

    這篇文章主要介紹了Spring?MVC?DispatcherServlet處理請求過程示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • centos7安裝java的多種方式總結(jié)

    centos7安裝java的多種方式總結(jié)

    這篇文章主要給大家介紹了關(guān)于centos7安裝java的多種方式,文中通過實例代碼以及圖文介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2023-01-01
  • 深入理解Mybatis二級緩存

    深入理解Mybatis二級緩存

    與一級緩存相比,二級緩存范圍更大了一些,可以被多個SqlSession所共用。下面通過本文帶領(lǐng)大家一起學(xué)習(xí)mybatis二級緩存知識,一起看看吧
    2016-12-12
  • Java 判斷IP地址的合法性實例詳解

    Java 判斷IP地址的合法性實例詳解

    這篇文章主要介紹了Java 判斷IP地址的合法性實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 淺談 java中ArrayList、Vector、LinkedList的區(qū)別聯(lián)系

    淺談 java中ArrayList、Vector、LinkedList的區(qū)別聯(lián)系

    ArrayList,Vector底層是由數(shù)組實現(xiàn),LinkedList底層是由雙線鏈表實現(xiàn),從底層的實現(xiàn)可以得出性能問題ArrayList,Vector插入速度較慢,查詢速度較快,而LinkedList插入速度較快,而查詢速度較慢。再者由于Vevtor使用了線程安全鎖,所以ArrayList的運行效率高于Vector
    2015-11-11
  • 解決Spring Cloud feign GET請求無法用實體傳參的問題

    解決Spring Cloud feign GET請求無法用實體傳參的問題

    這篇文章主要介紹了解決Spring Cloud feign GET請求無法用實體傳參的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 分享一個簡單的java爬蟲框架

    分享一個簡單的java爬蟲框架

    這篇文章主要介紹了分享一個簡單的java爬蟲框架,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Java中HashMap和Hashtable的區(qū)別淺析

    Java中HashMap和Hashtable的區(qū)別淺析

    這篇文章主要介紹了Java中HashMap和Hashtable的區(qū)別淺析,本文總結(jié)了6條它們之間的不同之處,需要的朋友可以參考下
    2015-03-03
  • 最新評論