這才是 Python的「72 變」玩法!
作者 | 阿廣
責編 | 胡巍巍
基於Python的鉛筆素描圖
說到鉛筆素描,很多畫家用它用得極為精湛。
有的細緻到跟照片無法區別,簡直是墨筆丹青,如行雲流水繞素箋,展瀚海崇山依舊顏,怎一個好字了得;但是有的人畫素描怎麼花都畫不好。
那麼同一根鉛筆,為啥差距這麼大呢?今天筆者給大家介紹一種使用PIL庫對原畫自動生成素描畫。
思考
鉛筆素描的細節實體如何和Python灰度化、模糊度進行轉換?
模糊度和參數如何調節?
彩色圖像和鉛筆素描對比
筆者丑照圖
筆者丑照鉛筆素描圖
山東科技大學校訓彩色圖
山東科技大學校訓鉛筆素描圖
濟南校區一角風景原圖
濟南校區一角風景鉛筆素描圖
山科一角美景圖
山科一角鉛筆素描圖
爬蟲技術分析
PIL庫:
PIL(Python Image Library)是Python的第三方圖像處理庫,但是由於其強大的功能與眾多的使用人數,幾乎已經被認為是Python官方圖像處理庫了。其官方主頁為:PIL。
PIL歷史悠久,原來是只支持Python2.x的版本的,後來出現了移植到Python3的庫Pillow,Pillow號稱是friendly fork for PIL,其功能和PIL差不多,但是支持Python3。
代碼解析
導入PIL庫
fromPILimportImage, ImageFilter, ImageOps
載入圖片
#先到相應的路徑下載入到這張圖片
img= Image.open("zandaoguang.jpg") #jpg和png格式均可
處理圖片並展示圖片
defFormula(a, b, alpha):
returnmin(int(a*255/(256-b*alpha)),255)
#通過雙層for循環將圖片轉換
defzandaoguang(img, blur=25, alpha=1.0):
img1 = img.convert("L")#圖片轉換成灰色
img2 = img1.copy()
img2 = ImageOps.invert(img2)
foriinrange(blur):#模糊度
img2 = img2.filter(ImageFilter.BLUR)
width, height = img1.size
forxinrange(width):
foryinrange(height):
a = img1.getpixel((x, y))
b = img2.getpixel((x, y))
img1.putpixel((x, y), Formula(a, b, alpha))
img1.show()#展示圖片效果
zandaoguang(img)
由於篇幅原因,這就只展示部分代碼,詳情請查看源碼請自行去GitHub下載:
https://github.com/zandaoguang/pic_proc
後記
畢加索曾經說過:「我在十幾歲時畫畫就像個古代大師,但我花了一輩子學習怎樣像孩子那樣畫畫。」
最後筆者想對大家說:畫畫,我是認真的;搞笑,絕對不是故意的。
如何利用Python打飛機?
學過爬蟲的朋友都知道,它是一門「以簡制勝」的語言,在筆者兩天的努力下,使用200行代碼完成了「打飛機」小遊戲。
我相信雷霆戰機很多人都玩過吧,它是Pygame庫開發出來的。同時,它還可以開發掃雷、坦克大戰等很多有趣的遊戲!
遊戲界面
遊戲說明
這是一個簡易的Python遊戲代碼,很多細節都沒有去做;
大家克隆下來可以直接運行showEnemy.py即可;
和ASDF控制方向,空格鍵發射子彈;
Random函數主要實現敵方飛機產生和子彈的發射頻率;
time.sleep()為了讓CPU休息;
後期我們完善的時候可以加上擊中等場景的特效。
部分代碼
初始化飛機參數
def__init__(self,screen):
#設置飛機默認的xy值
self.x=180
self.y=600
self.screen=screen
self.imageName="./feiji/hero.gif"
self.image=pygame.image.load(self.imageName).convert()
self.bulletList=[]
self.needRemoveList=[]
顯示飛機
defdisplay(self):
self.screen.blit(self.image,(self.x,self.y))
forbulletinself.bulletList:
bullet.display()
bullet.move()
forbulletinself.bulletList:
ifbullet.judgeOut():
self.needRemoveList.append(bullet)
forbulletinself.bulletList:
ifbulletinself.needRemoveList:
self.bulletList.remove(bullet)
飛機移動
defmove(self,opt):
ifopt=="left":
self.x-=15
elif opt=="right":
self.x+=15
elif opt=="up":
self.y-=15
elif opt=="down":
self.y+=15
飛機射擊
defshoot(self):
newBullet=Bullet(self.screen,self.x,self.y)
newBulletLeft=BulletSmall(self.screen,self.x,self.y)
newBulletRight=BulletSmall(self.screen,self.x+64,self.y+20)
self.bulletList.append(newBulletLeft)
self.bulletList.append(newBulletRight)
self.bulletList.append(newBullet)
Python版雷霆戰機完整代碼鏈接:
https://github.com/zandaoguang/play-plane
之前玩雷霆戰機的時候,看起來打飛機遊戲蠻複雜,結果經過自己的實現之後,發現僅僅200行就能完成一個打飛機的小項目。
敲黑板,我們在做任何一件事情得時候,一定不要眼高手低,也不要大題小作。
只要是認真做就可以超越昨天的自己。像這款遊戲一樣,我們的人生只有一關一關的擊敗敵機(困難),只有在擊敗了敵機的情況下(完成了艱難任務),我們才能獲得新的裝備(知識),不斷攀升,最終經過不斷提升自己,走向成功!下面是啊廣總結,與大家共勉!
眼高手低志不廣,
欺軟怕硬人囂張;
欲上天宮攬明月,
以為自己會飛翔!
作者簡介:阿廣。本文首發個人公眾號視學演算法,專註於大數據、人工智慧和演算法的學習平台,也是一名保送中科院軟體研究所直博的技術提升之路。人生苦短,我願做您最忠實的技術支持夥伴!一起用代碼改變世界!
聲明:本文為作者投稿,版權歸其個人所有。


※鎚子終究走起了小米的路子
※如何高效排查日均調度量超兩百萬次的重複調度問題?
TAG:CSDN |