Android 文字生成圖片

一直在看別人寫的文章,而自己卻不敢執(zhí)筆來(lái)寫,一是怕寫得不好,二是平時(shí)也不太有寫文章的習(xí)慣,所以總感覺看別人寫就好啦,但是最近工作遇到點(diǎn)問(wèn)題,本以為很簡(jiǎn)單的,但是奈何解決起來(lái)還是比較麻煩的

把Android中的文字轉(zhuǎn)換為圖片,并與現(xiàn)有的圖片合并打印??? /**因?yàn)槲沂亲鯬OS機(jī),所以有打印這一項(xiàng)*/

剛開始接到這個(gè)任務(wù)的時(shí)候,真的是比較緊張,自己是新人,怕做不好,所以在網(wǎng)上也找了不少資源來(lái)看,但是效果都不理想,甚至說(shuō)與想象中的差距很大,所以就自己寫了個(gè)打印的東西,好了廢話不多說(shuō)下面就開始正題吧

哦,對(duì)了,首先大家看下效果:


效果圖

這個(gè)圖片就是生成的圖片,怎么做呢?


本來(lái)我的最初想法是 把文字按照待打印的組合形式把它組合成一個(gè)View,之后做出類似于[簡(jiǎn)書]app的圖片分享的效果,把View變成圖片,但是這樣做需要把文字一次性拿到手,估計(jì)在我們的項(xiàng)目中使用起來(lái)比較困難,所以就考慮把文字拿到手后,一行行的把文字畫出來(lái)

文章最后我把github地址貼出來(lái),方便大家查看


stringListtoBitmap

該方法比較容易理解,在這里我就說(shuō)下該方法的大致思路:

1.方法參數(shù)是待打印的文字的List集合,其中存放的就是一行行待打印的文字

2.讀入?yún)?shù)后,先配置生成圖片的寬度[為8的倍數(shù)],然后把每一行文字讀入計(jì),并計(jì)算這一行是否可以完全顯示,如果不能一行顯示需要多少行 /**8的倍數(shù)是打印機(jī)規(guī)定的,如果是測(cè)試倒無(wú)所謂*/

將一行長(zhǎng)文字切割成多行

3.這里我們主要做得是把回車換行多算一行,以及大文字也多算一行,以便生成的位圖足夠大,并且把背景色設(shè)置成白色

行數(shù)計(jì)算 背景涂色

4.生成空的位圖,開始遍歷List集合,繪制每一行,返回生成的圖片

根據(jù)條件生成位圖

對(duì)于圖片的合并,這個(gè)比文字生成圖片更簡(jiǎn)單一點(diǎn),我就不截圖了,復(fù)制點(diǎn)代碼吧:

1.取出兩張位圖,把最寬的設(shè)置為寬度,高度之和設(shè)置為生成圖片的高度

int width = Math.max(first.getWidth(), second.getWidth());

int height = first.getHeight() + second.getHeight();

2.這里比較麻煩的就是 logo的位置必須居中顯示,所以我們需要把logo繪制的起點(diǎn)改變一下

int startWidth = (width - first.getWidth()) / 2;

3.繪制即可

Bitmap result = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);

Canvas canvas = new Canvas(result);

canvas.drawBitmap(first, startWidth, 0, null);

canvas.drawBitmap(second, 0, first.getHeight(), null);

其他方面的就不再多說(shuō)了,主要看下性能,我覺得圖太多的話,就比較慢了,主要是不管文字生成圖還是合成新圖,都會(huì)遇到設(shè)置背景色的問(wèn)題

背景

這里是比較耗時(shí)的,如果圖片小的話,還是可以忍耐,但是當(dāng)合并的多的時(shí)候,就會(huì)很慢,當(dāng)然如果僅僅是生成文字話,還是一次設(shè)置就可以了,我這邊主要是有圖片,就說(shuō)我的例子:logo必須是居中打印的,如果合并圖片的時(shí)候,不讓背景為白色,logo不占空間的地方就是空,這時(shí)候打印出來(lái)的就是黑色的玩意,所以我是必須要加這部分代碼的,如果你在使用的時(shí)候僅僅是文字,圖片也是完整的圖,那就不必加我這部分了,耗時(shí)不得好。

傳送門

當(dāng)然轉(zhuǎn)為圖片的形式不止這一種辦法,還有個(gè)將view截圖為Bitmap,之前也做過(guò),但是那樣做的不清晰,比較模糊,后面準(zhǔn)備補(bǔ)寫截圖的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容