最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用Java制作字符動(dòng)畫實(shí)例代碼

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

前言

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

正文

效果展示

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

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

實(shí)現(xiàn)原理

其實(shí)字符動(dòng)畫的實(shí)現(xiàn)原理比較簡(jiǎn)單,這里我們拋開(kāi)GIF,直接拿一張靜態(tài)圖片來(lái)說(shuō)明。

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

取顏色的RGB均值灰度后

接著我們可以定義需要使用的字符,每個(gè)字符對(duì)應(yīng)一段亮度范圍,比如 圖中的M,@,;等字符,接著我們就可以去遍歷替換圖片中的所有像素,慢慢的調(diào)試每個(gè)字符對(duì)應(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) {//遍歷圖片中的像素點(diǎn),用字符判斷像素范圍來(lái)替換
			for (int j = minx; j < width; j += 8) {
				int pixel = bi.getRGB(j, i); // 下面三行代碼將一個(gè)數(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; //圖片變灰計(jì)算公式
				char c = toChar((int) gray); //根據(jù)計(jì)算出來(lái)的gray值返回不同字符
				bufferedWriter.write(c);
			}
			bufferedWriter.newLine();
		}
		//輸出圖片

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

由于完全自己處理的話,可能會(huì)有很多細(xì)節(jié)需要調(diào)整的地方,為了方便,這里推薦一個(gè)項(xiàng)目。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);

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

結(jié)語(yǔ)

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

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

總結(jié)

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

相關(guān)文章

  • Mybatis查詢Sql結(jié)果未映射到對(duì)應(yīng)得實(shí)體類上的問(wèn)題解決

    Mybatis查詢Sql結(jié)果未映射到對(duì)應(yīng)得實(shí)體類上的問(wèn)題解決

    使用mybatis查詢表數(shù)據(jù)得時(shí)候,發(fā)現(xiàn)對(duì)應(yīng)得實(shí)體類字段好多都是null,本文主要介紹了Mybatis查詢Sql結(jié)果未映射到對(duì)應(yīng)得實(shí)體類上的問(wèn)題解決,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • Java圖形用戶界面設(shè)計(jì)(Swing)的介紹

    Java圖形用戶界面設(shè)計(jì)(Swing)的介紹

    看到多數(shù)人提到 Java 就以為是網(wǎng)絡(luò)開(kāi)發(fā),其實(shí)不是這樣的,Java 也可以開(kāi)發(fā)應(yīng)用程序,而且可以開(kāi)發(fā)出漂亮的圖形用戶界面的應(yīng)用程序,因此,我寫下這篇文章,希望能帶你進(jìn)入 Java 圖形用戶界面設(shè)計(jì)之門。
    2016-07-07
  • 如何使用Maven管理項(xiàng)目?Maven管理項(xiàng)目實(shí)例

    如何使用Maven管理項(xiàng)目?Maven管理項(xiàng)目實(shí)例

    下面小編就為大家?guī)?lái)一篇如何使用Maven管理項(xiàng)目?Maven管理項(xiàng)目實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • 淺析如何高效格式化輸出JSON字符串

    淺析如何高效格式化輸出JSON字符串

    JSON(JavaScript?Object?Notation)作為一種輕量級(jí)的數(shù)據(jù)交換格式,已經(jīng)成為了各種編程語(yǔ)言間傳遞數(shù)據(jù)的標(biāo)準(zhǔn),下面我們就來(lái)聊聊如何高效格式化輸出JSON字符串吧
    2025-01-01
  • Java對(duì)List進(jìn)行排序的兩種實(shí)現(xiàn)方法

    Java對(duì)List進(jìn)行排序的兩種實(shí)現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于Java對(duì)List進(jìn)行排序的兩種實(shí)現(xiàn)方法,第一種是實(shí)體類自己實(shí)現(xiàn)比較,第二種是借助比較器進(jìn)行排序,下面開(kāi)一起看看詳細(xì)的介紹吧,有需要的朋友們可以參考借鑒。
    2016-12-12
  • Java基礎(chǔ)知識(shí)之StringWriter流的使用

    Java基礎(chǔ)知識(shí)之StringWriter流的使用

    這篇文章主要介紹了Java基礎(chǔ)知識(shí)之StringWriter流的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java中的DTO的使用示例

    java中的DTO的使用示例

    在Java中,DTO代表數(shù)據(jù)傳輸對(duì)象,本文主要介紹了java中的DTO的使用示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • Java/Android引用類型及其使用全面分析

    Java/Android引用類型及其使用全面分析

    下面小編就為大家?guī)?lái)一篇Java/Android引用類型及其使用全面分析。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-09-09
  • PowerJob的DispatchStrategy方法工作流程源碼解讀

    PowerJob的DispatchStrategy方法工作流程源碼解讀

    這篇文章主要為大家介紹了PowerJob的DispatchStrategy方法工作流程源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • 關(guān)于Mybatis-Plus?Update更新策略問(wèn)題

    關(guān)于Mybatis-Plus?Update更新策略問(wèn)題

    這篇文章主要介紹了關(guān)于Mybatis-Plus?Update更新策略問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評(píng)論

慈利县| 美姑县| 河曲县| 兴山县| 丰宁| 星子县| 西华县| 济南市| 抚远县| 锡林郭勒盟| 嘉定区| 邯郸市| 永昌县| 紫金县| 麻栗坡县| 阿克苏市| 慈溪市| 彰化县| 黄龙县| 沈丘县| 安国市| 延川县| 永定县| 南投县| 广饶县| 微博| 沁阳市| 台南市| 洛隆县| 来安县| 韩城市| 朝阳县| 梁平县| 白银市| 余庆县| 青河县| 图们市| 嘉祥县| 昌平区| 公主岭市| 闽清县|