tft每日頭條

 > 科技

 > python編程代碼打印圖畫

python編程代碼打印圖畫

科技 更新时间:2024-11-30 11:48:18

文 | JiawuLab ,原創作品。

前兩天,我用Python寫了個小程序,主要功能是将一張圖輸入後,程序會輸出字符圖,然後将字符圖保存在txt文本中,效果圖如下:

python編程代碼打印圖畫(如何用Python寫一個小程序)1

表情包轉化為字符圖

昨天将這個小程序的一些技術要點發布到了微頭條中,這裡将技術要點貼出來:

1、首先對圖片進行黑白處理、對比度處理,這樣可以去除很多的噪點,
2、然後使用了getpixel()方法,該方法可以得到當前位置圖片的顔色值,
3、再通過顔色值的判斷,就能将不同的顔色值處理成對應的符号,這裡我處理為“#“ ,
4、最後将所有顔色值處理後得到的符号信息,保存為txt文件。

python編程代碼打印圖畫(如何用Python寫一個小程序)2

微頭條閱讀數一天過萬

如上圖,微頭條獲得很多朋友的關注,短短一天的時間,閱讀數就突破了1萬2,特别高興,我會繼續加油的。

本篇文章将創造這個小程序中的思考與實踐過程分享給大家,也期待大家能理解造輪子過程的樂趣。


一、為什麼會寫這個小程序?

說來話并不長,在學習群中,有位可愛的同學,分享了一張某程序員的注釋圖,裡面寫了篇打油詩,還配了張字符圖,就是下面這張圖:

python編程代碼打印圖畫(如何用Python寫一個小程序)3

同學分享的圖

看得出作者非常的有才氣,隻是好像言語之中透露了某些信息,哈哈〜

而我看到的就是下面這尊字符串佛像,觸發了自己寫個小程序将圖片轉換為字符圖的念頭,這就是我寫這個小程序的初衷。


二、思考過程

我初步的想法是:

1、在網上找一張圖,然後将圖片轉化為黑白圖,
2、利用PIL庫中的方法,獲取圖片上的顔色數值,
3、将黑色和白色的部分,分别用不同的字符串代替

最後打印出來就可以了,而且技術實現也很簡單。


三、實踐過程

首先,我在網上找到了一張很有feel的圖片,如下圖:

python編程代碼打印圖畫(如何用Python寫一個小程序)4

圖片來自網絡

技術實現過程如下:

1、convert('1'),用來轉化為黑白圖,
2、使用PIL庫中的getpixel()方法獲取顔色數值,此時隻有“0”、“1”,
3、使用"for"循環,遍曆整張圖片,将“0”、“1”分别用“ ”,“#”代替,得到字符串并打印

運行代碼,發現圖片太大,顯示不出來,如下圖中紅色箭頭指的部分,隻是圖片中最左上角的一點:

python編程代碼打印圖畫(如何用Python寫一個小程序)5

圖片太大

于是改代碼,做出下面兩點修改

1、利用“resize”函數,将圖片尺寸更改為固定寬度“150”,高度使用運算公式獲取,代碼為:“im.resize((150, int(im.size[1]/im.size[0]*150)))”
2、将字符串,輸出到“txt”文本中,方便運行查看

運行後,打開保存的txt文件,發現全糊了,根本看不清是什麼。

python編程代碼打印圖畫(如何用Python寫一個小程序)6

全糊了

如上圖,完全看不出是什麼,于是我用“im.show()”方法,查看了黑白圖片是什麼樣的:

python編程代碼打印圖畫(如何用Python寫一個小程序)7

黑白圖片

從這裡就能看出來,原來生成的黑白圖片的噪點太多,除了獅子是糊的,左下角也都是噪點。

所以在原圖轉為黑白圖片前,需要做一下圖片處理,這裡就會用到"ImageEnhance"方法,進行對比度等圖片處理,比如此處用到的對比度圖片代碼為“ImageEnhance.Contrast(im).enhance(2.0)”

python編程代碼打印圖畫(如何用Python寫一個小程序)8

對比度處理後

這樣就好很多了,圖片上基本上沒有太多噪點了,獅子整體也非常明顯,但是有點太亮了,所以再次使用亮度處理,代碼為“ImageEnhance.Brightness(im).enhance(0.9)”

python編程代碼打印圖畫(如何用Python寫一個小程序)9

亮度處理後

現在黑白圖片整體看上去,就比較不錯了,可以進行字符圖的生成。

在前面生成的字符圖中,我發現一個問題,周邊設置為空白,不是很好看,所以修改技術點為:

将“0”、“1”分别用“ ”,“#”代替——改為将“0”、“1”分别用“#”,“ ”代替

隻是将字符串替換了一下,最後得到的字符圖為:

python編程代碼打印圖畫(如何用Python寫一個小程序)10

最終效果

一隻王者氣派的獅子字符圖就做好了,是不是很像那麼回事。

在圖片處理過程中,其實做了很多動作,包括選擇圖片處理效果時,使用了很多的方法,最後确定下來使用對比度和亮度的結合。

而對比度和亮度處理中的參數,也需要不斷的進行優化,最後才能呈現出比較漂亮的結果。

python編程代碼打印圖畫(如何用Python寫一個小程序)11

對比圖

如上圖,放上原圖和字符圖的對比效果,字符圖會有一些縱向拉伸的效果,這是因為txt文件的行間距的問題。換個角度來看,這就是天然的瘦身效果哦。


四、複雜背景圖片的演示

獅子這張圖是背景比較簡單的圖片,那麼背景複雜的效果又會如何呢?(永遠要有一顆折騰的心〜)

我在網上找到一張背景複雜的圖片,如下圖:

python編程代碼打印圖畫(如何用Python寫一個小程序)12

圖片來自網絡

然後運行程序,看看會得到什麼呢?(我想應該美女應該會變瘦哦,哈哈〜)

python編程代碼打印圖畫(如何用Python寫一個小程序)13

效果圖

果然,生成的字符圖中,美女變得又高又瘦,我感覺比原圖更好看啦〜

python編程代碼打印圖畫(如何用Python寫一個小程序)14

換個圖演示一下

我又找了另一張圖,生成的效果,還不錯吧。


五、代碼分享

最後,我将代碼分享給大家,整個代碼不到20行,特别簡單:


python編程代碼打印圖畫(如何用Python寫一個小程序)15

需要提醒的是:有些圖片生成的字符圖會不太好看,你自己可以根據需要調整參數或是圖片處理方法。


六、總結

本期文章中,我将創作一個小程序的整個過程分享出來,其中包含前期的思考過程,功能實踐過程,以及功能調優過程。

我認為最重要的一點就是前期的思考過程,通過對需求的分析,能夠讓我們找到合适的技術實現要點,從而讓整個實踐過程可控,能更順利的實現功能。

希望你喜歡本期的分享,歡迎大家在評論區讨論、轉發,或者順手點個贊。謝謝。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved