日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

java字符动画思路_【轻松一刻】Java制作字符动画

發(fā)布時(shí)間:2024/1/23 java 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java字符动画思路_【轻松一刻】Java制作字符动画 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

今晚閑來無事,整理了一下電腦中塵封已久的舊代碼,看著那些年自己寫過的代碼,踩過的坑,頓時(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)東西出來還是非常有成就感的。

正文

效果展示

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

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

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

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

首先我們要把原圖轉(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),用字符判斷像素范圍來替換

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ì)算出來的gray值返回不同字符

bufferedWriter.write(c);

}

bufferedWriter.newLine();

}

//輸出圖片

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

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

// 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é)語

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

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

推薦閱讀

有收獲的話,就點(diǎn)個(gè)贊吧

關(guān)注「深夜里的程序猿」,分享最干的干貨

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的java字符动画思路_【轻松一刻】Java制作字符动画的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。