最近想做一個圖片轉成字符畫的功能
轉換出來的效果類似這種
在查看大佬的源碼時,突然靈光一閃,想到以前在用echarts做文字云遇到的一個問題。那個時候是使用了echarts的文字云插件庫做的(https://github.com/ecomfe/echarts-wordcloud)
文字云效果
遇到的問題就是有一些圖片上傳上去無法正常轉換成文字云。那個時候試過轉換不同格式等方法,都沒有找到問題的根源。而這次做字符畫的時候,終于發(fā)現(xiàn)了這個問題是出在哪。
在一位大佬關于轉換字符畫的文章里寫到
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。
原圖
轉換出來失敗的圖
個人猜測這種都是二值圖像,所以沒有RGB,只有A是0或255代表黑或白。而大部分轉換為字符畫的處理(以及文字云轉換)中都忽略了A,遇到這種二值圖像得到的gray都是0,無法抽象出圖像的輪廓。
而且灰度圖像可能也會出現(xiàn)這種問題。
所以可以增加對A的處理,當RGB都為0,但A(A = data[index + 3] )有值的時候,gray也需要有值。可以根據(jù)A的大小來取值。這樣就可以解決這個問題了。(echarts的文字云應該也是同樣的問題,但是源碼比較復雜還沒好好研究。)