# Pillow --- # Before #### 大家先 pip install ---- ## 需求1 1. 一張迷宮地圖 2. 必須對齊格點 3. 位置必須依照地圖資訊 ---- - 地圖資訊如圖 ![](https://i.imgur.com/rW1S3b9.png =50%x) ---- ## 需求2 1. 為每一張圖片或者整份gif都加入浮水印 ---- ### 需求3 1. 進行圖片的組合或者是排版 2. size必須固定 ---- ### 需求4 1. 描繪地圖輪廓 ---- 面對這些需求,你有什麼想法嗎? - https://github.com/NussMou/pillow_sprout --- # Pillow #### 一個沒辦法處理得很精細,但超級方便的圖像處理工具 ---- ### PIL = Python Imaging Libraty ---- # First step - load image - 看看被load的圖片 - 存起來 ``` from PIL import Image img = Image.open('檔名') img.show() img.save("檔名") ``` --- # Second step - get some details ``` print("size =" , img.size) print("image_format =",img.format) ``` --- # Third step - process and create ``` img.resize((tuple)) ``` ``` from PIL import Image img = Image.open("brown.png") (w, h) = img.size print(w, h) img.show() new = img.resize((256, 512)) (w,h) = new.size print(w,h) new.show() new.save("assets/resize_save.png") ``` ---- # thumbnail vs resize 1. thumbnail的比例是固定的 2. thumbnail無法放大 3. thumbnail跑比較快,因為他不會產生新的檔案 ---- ``` img.rotate(number) img.crop((left,top,right,left) img.convert('L') img.paste(object,(x,y)) img.putpixel() ``` ---- # Practice - 將照片旋轉後,比對灰階和原本照片的RGB - 不可以看到旋轉後的黑邊 - 把兩張照片一左一右放在一起 ---- # 調整對比度、亮度、色平衡和銳利度 ``` from PIL import Image,ImageEnhance ``` ---- ``` from PIL import Image,ImageFilter ``` ---- ``` from PIL import Image,ImageFilter Image1 = Image.open('evening1.jpg') Image1copy = Image1.copy() Image2 = Image.open('evening2.jpg') Image2copy = Image2.copy() Image1copy.paste(Image2copy, (500, 500)) img = Image1copy.filter(ImageFilter.GaussianBlur(50)) Image1copy.save('assets/pasted2.png') ``` ---- # 沒事把照片弄糊幹嘛 ``` from PIL import Image, ImageDraw, ImageFilter img = Image.new("RGBA", (5000, 5000), (0,0,0,255)) ImageDraw.Draw(img).ellipse((2000,2000,3000,3000), fill=(0,0,0,0)) img = img.filter(ImageFilter.GaussianBlur(50)) img.show() img.save("assets/blur_circle.png") ``` ---- # 有趣的小補充 - Alpha混色源顏色和最終顏色的顏色進行混合,顯示其RGB分量和顏色。 ---- ``` from PIL import Image, ImageDraw, ImageFilter img = Image.new("RGBA", (500, 500), (255,200,50,0)) # img = Image.new("RGBA", (500, 500), (0,255,255,60)) # img = Image.new("RGBA", (500, 500)) ImageDraw.Draw(img).ellipse((200,200,300,300), fill=(255,155,60,255)) img = img.filter(ImageFilter.GaussianBlur(10)) img.show() img.save("assets/bling_ball.png") ``` ---- # 如果不要螢光效果 ``` from PIL import Image, ImageDraw, ImageFilter img = Image.new("RGBA", (200, 200), (0,0,0,0)) ImageDraw.Draw(img).ellipse((20,20,180,180), fill=(255,0,0,255)) img = img.filter(ImageFilter.GaussianBlur(10)) # img.show() img.save("assets/bling_ball.png") ``` --- ## 講了這麼多,大家試著依據官方文件完成以下練習吧 ---- 1. 完成迷宮地圖 ![](https://i.imgur.com/GnluBjS.png =50%x) ---- 2. 去尋找可以繪出地圖的輪廓的方式 - 或許你們可以很簡單的用Google找到答案,但如果可以請去看官方文件 ![](https://i.imgur.com/XSmJtnQ.jpg) ---- 3. 模仿做出下圖(可用自己的素材) ![](https://i.imgur.com/4UldGAH.jpg) # 原因 1. 這和你們過去用的邏輯思維有一點不一樣 2. 我有放解答code --- # 小小的補充與澄清 ---- 1. Pillow確實可以完成很多事情,但如果追求很精緻的作品,Pillow很可能不是一個好的選擇 ---- # 一些有助於創作的資源 1. WebGL [WebGL的wiki](https://zh.m.wikipedia.org/zh-tw/WebGL) 2. Processing and P5.js [OpenProcessing](https://openprocessing.org/browse/#) 3. CSS and HTML [codepen](https://codepen.io/trending) ---- 2. Pillow確實可以幫助你轉檔(eg. jpg -> png),但ffmpeg可能是更好的選擇。 ---- 3. 可以試著把Pillow和numpy一起運用 ---- 4. Python 的其他與圖想處理有關的module 1. wand 2. OpenCV 3. Mahotas
{"metaMigratedAt":"2023-06-17T03:10:28.168Z","metaMigratedFrom":"Content","title":"Pillow","breaks":true,"description":"一張迷宮地圖","contributors":"[{\"id\":\"67f64c5d-de88-4a53-9b64-c2cfb2bffa58\",\"add\":3985,\"del\":567}]"}
    398 views