最近想做一個(gè)圖片轉(zhuǎn)成字符畫(huà)的功能

在查看大佬的源碼時(shí),突然靈光一閃,想到以前在用echarts做文字云遇到的一個(gè)問(wèn)題。那個(gè)時(shí)候是使用了echarts的文字云插件庫(kù)做的(https://github.com/ecomfe/echarts-wordcloud)

遇到的問(wèn)題就是有一些圖片上傳上去無(wú)法正常轉(zhuǎn)換成文字云。那個(gè)時(shí)候試過(guò)轉(zhuǎn)換不同格式等方法,都沒(méi)有找到問(wèn)題的根源。而這次做字符畫(huà)的時(shí)候,終于發(fā)現(xiàn)了這個(gè)問(wèn)題是出在哪。
在一位大佬關(guān)于轉(zhuǎn)換字符畫(huà)的文章里寫(xiě)到

R = data[index],
G = data[index + 1],
B = data[index + 2],
gray = ~~(R * 0.3 + G * 0.59 + B * 0.11);
代碼里也是這樣取的(整段代碼可以看大佬的原文https://blog.csdn.net/qq_27892551/article/details/50504117)而那些失敗的圖片,RGB的值都是0,但A的值是0或者255。


個(gè)人猜測(cè)這種都是二值圖像,所以沒(méi)有RGB,只有A是0或255代表黑或白。而大部分轉(zhuǎn)換為字符畫(huà)的處理(以及文字云轉(zhuǎn)換)中都忽略了A,遇到這種二值圖像得到的gray都是0,無(wú)法抽象出圖像的輪廓。
而且灰度圖像可能也會(huì)出現(xiàn)這種問(wèn)題。
所以可以增加對(duì)A的處理,當(dāng)RGB都為0,但A(A = data[index + 3] )有值的時(shí)候,gray也需要有值。可以根據(jù)A的大小來(lái)取值。這樣就可以解決這個(gè)問(wèn)題了。(echarts的文字云應(yīng)該也是同樣的問(wèn)題,但是源碼比較復(fù)雜還沒(méi)好好研究。)