# 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}]"}