學號 20202116 《Python程序設計》實驗報告
課程:《Python程序設計》
班級: 2021
姓名: 李鴻略
學號:20202116
實驗教師:王志強
實驗日期:2021年6月13日
必修/選修: 公選課
1.實驗內容
Python綜合實踐,從小到大喜歡畫(但是不會畫),特別喜歡看別人畫畫,也特別喜歡看別人用一些廢棄的物品組成一幅好看的畫。既然廢品都能畫畫,那我覺得利用字母畫畫也是可行的,恰巧在網上看到有許多dalao有相關的教程,其中內容也包含了較多python的知識點,不妨用來完成我的期末大作業。
2. 實驗過程及結果
原理十分簡單:
將彩圖導入程序—>將彩圖轉換成灰圖—>灰圖轉換成字符
首先導入PIL庫用於處理圖片
然后定義類 save 來讀寫文本(后面用)
Getchars用於利用字符串來替換灰度
當然,飯要一口一口吃,在彩圖情況下,每一個像素點返回的是一個tuple ,里面是它的RGB值。但是無論我們使用R、G還是B都不能很好表示該點的顏色深度,所以,我們要先把他轉換為灰色圖 函數:img = img.convert('L')
換了之后圖是這樣子的
灰圖在函數getpixel中返回顏色深度,我們可以利用字符占黑比(就是字符有多黑)比較,在不同深淺的地方采取不同的字符替換
因為圖片像素點太多了,我們要先重置圖片大小,把像素減少再進行比較
效果圖:
是不是很像?(bushi)原因在於可利用的字符只有八種,實在太少。因此我們要增多字符的個數,當然range也要變
算你有只貓樣
我們可以增加圖像的像素,讓他看起來更像他自己
3. 實驗過程中遇到的問題和解決過程
- 問題1:一開始不知道彩圖在函數getpixeGB 返回的是RGB元組,元組不能和整形數比較
- 問題1解決方案:所以要把彩圖轉化為灰圖
- 問題2:Traceback (most recent call last):
File "C:\Users\Hungloek\Desktop\python\picturechange.py", line 60, in <module>
line += get_chars(pi)
File "C:\Users\Hungloek\Desktop\python\picturechange.py", line 19, in get_chars
return chars[15 - k]
IndexError: list index out of range
- 問題2解決方案:這里是創造更多的字符,讓顏色區別度更大,但是忘記調整range的范圍,導致了list index out of range,所以我們要根據字符數來調整range。
感悟:python幫助我打開了編程的新的大門。它擁有許許多多強大的第三方庫,使我可以輕輕松松使用原來我可能一兩年都編不出來的函數,使我在解決實際問題時更加輕松。本學期,我們學習了python輸入輸出 條件與循環、序列、字符串、函數、面向對象、數據庫、socket、爬蟲等等內容。與c語言相比,python更加人性化。這次大作業因為我實現沒有學習PIL,因此處理起來還是相當麻煩,等之后有機會,准備嘗試着先利用爬蟲爬取如何實現字符串畫畫的大量資料,聚集起來學習透徹之后,再去實現編程。最后,感謝王志強老師帶領我走入python的世界,希望以后能和老師一起繼續探討更多有關計算機的知識!