1. 圖片裁切
裁切的概念與應用
好啦,我們來了解一下怎麼裁切和旋轉圖片吧!這技能真的很實用,從網站圖形製作到社群媒體內容創作都用得上。
裁切圖片就像剪掉照片多餘的邊緣一樣,讓我們的焦點集中於主要物體。假設你拍了一張超棒的日落照片,但邊緣卻不小心拍到一些路人甲乙。透過裁切,咱們可以把那些路人移除掉(虛擬地,當然啦!)。
方法 crop()
crop()
方法需要指定一個矩形區域的座標,然後將這個區域從圖片中裁切出來。座標由四個值組成:(左, 上, 右, 下)
。
# 裁切圖片
cropped_image = image.crop((100, 100, 400, 400))
# 儲存裁切後的圖片
cropped_image.save("cropped_example.jpg")
在這個例子中,圖片將裁切為左上角座標為 (100, 100)
,右下角座標為 (400, 400)
的區域。這個方法會從原始圖片中生成一個新圖片。
基於圖片尺寸的動態裁切
如果你想裁切圖片的中心區域,可以根據圖片的尺寸計算裁切的座標:
width, height = image.size
left = (width - 200) / 2
top = (height - 200) / 2
right = (width + 200) / 2
bottom = (height + 200) / 2
center_cropped_image = image.crop((left, top, right, bottom))
center_cropped_image.save("center_cropped_example.jpg")
這段代碼裁切圖片的中心區域,大小為 200x200 像素。座標的計算確保裁切的區域位於圖片的中心。
2. 圖片旋轉
圖片旋轉可以改變它的方向,特別是圖片的拍攝方向錯誤時,或者你想創造一些特效的時候,非常實用。
方法 rotate()
rotate()
方法將圖片逆時針旋轉指定的角度。角度以度數表示,該方法會生成一個新的旋轉後的圖片。
# 將圖片逆時針旋轉 90 度
rotated_image = image.rotate(90)
rotated_image.save("rotated_90_example.jpg")
在這個例子中,圖片會被逆時針旋轉 90 度。你也可以指定其他旋轉角度(例如 45、180 或 270 度)來達到你想要的效果。
控制旋轉時的白邊
預設情況下,rotate()
方法會在圖片邊緣新增白邊(若使用 RGBA 模式則為透明邊)以保留所有內容。如果你想讓圖片填滿整個畫框而沒有邊緣,可以使用參數 expand=True
。
# 旋轉並擴展圖片,讓其填滿整個畫框
rotated_expanded_image = image.rotate(45, expand=True)
rotated_expanded_image.save("rotated_expanded_example.jpg")
在這種情況下,Pillow 將會調整圖片尺寸以容納所有內容,這在旋轉非標準角度(例如 45 度)時特別有用。
3. 圖片的鏡像反射
鏡像反射允許你將圖片水平或垂直翻轉。這在需要更改照片物體方向或創造對稱效果時非常有用。
方法 transpose()
方法 transpose()
用於鏡像反射,支持以下參數:
Image.FLIP_LEFT_RIGHT
: 水平反射。Image.FLIP_TOP_BOTTOM
: 垂直反射。
# 水平鏡像反射
flipped_horizontal = image.transpose(Image.FLIP_LEFT_RIGHT)
flipped_horizontal.save("flipped_horizontal_example.jpg")
# 垂直鏡像反射
flipped_vertical = image.transpose(Image.FLIP_TOP_BOTTOM)
flipped_vertical.save("flipped_vertical_example.jpg")
這些指令將圖片水平或垂直翻轉,可用於創造各類效果或修正方向。
裁切、旋轉與鏡像反射的實際應用示例
- 聚焦於圖片的特定區域: 裁切讓你能選出圖片中的關鍵部分,非常適合用於製作肖像、去掉多餘細節以及為社交媒體或網站準備圖片。
- 修正圖片方向: 旋轉可以修正圖片的方向,特別是當裝置拍攝時方向不正確時。例如,將橫向模式拍攝的圖片調整為豎向模式,以便發佈。
- 創造對稱效果: 鏡像反射常用於設計中,創造對稱的圖片、有趣的視覺效果,以及提升構圖。
4. 常見錯誤及其避免方法
使用 Pillow 時,初學者可能會遇到一些錯誤,其中之一是嘗試裁切超出圖片實際尺寸的範圍。一定要檢查圖片尺寸,並設定在該範圍內的裁切座標。
另一個細節是,在旋轉時如果沒有額外設定,圖片可能會看起來被裁切掉。這是因為圖片在旋轉後的尺寸發生了改變。為了避免這個問題,可以使用參數 expand=True
:
# 將圖片旋轉 45 度並擴展以避免角落被裁切
rotated_image = image.rotate(45, expand=True)
rotated_image.save("rotated_expanded.jpg")
GO TO FULL VERSION