Python 圖像處理這樣學 小白也易懂,還能順便學習 Photoshop

Pillow 是知名 Python 圖像處理庫 PIL 的一個知名分支,支持 Python 3,有很強大的圖像處理能力,但其 API 卻並不複雜,本文不是一篇詳盡 Pillow 完整教程,只是提供一種直觀淺顯的學習方法,對比 PhotoShop 圖像操作,學習圖像基礎知識與 Pillow 圖像處理操作,讓編程初學者對圖像處理不再感到神祕!

Adobe Photoshop,也就是大家熟知的 "PS",是一個由 Adobe 開發和發行的世界上最知名圖像處理軟件。對比 PS 操作可以更好理解圖像及圖像處理知識,本文以 Photoshop CC 2018 版本為例,由於涉及的均是基礎操作,不同版本 PS 操作差異並不大。

Python 圖像處理這樣學 小白也易懂,還能順便學習  Photoshop

Phtotoshop 歡迎頁

通常所說的圖像處理,包括圖像歸檔、顯示、處理幾個方面,在學習處理之前,必須掌握一些位圖的基礎知識。

位圖

位圖(Bitmap),是使用像素 Pixel 陣列來表示的圖像,簡單來講,我們看到的圖片是由一個個矩形的像素點排列構成的,由於像素點較小,且顯示屏幕的顯示分辨率精度夠高,所以肉眼不容易感覺到像素點的存在,但如果我們將一張位圖放大顯示,我們會發現明顯呈鋸齒狀顯示。

Python 圖像處理這樣學 小白也易懂,還能順便學習  Photoshop

Photoshop 中放大圖片 觀察像素

位圖的像素都分配有特定的位置和顏色值。每個像素的顏色信息由RGB組合或者灰度值表示。根據位深度,可將位圖分為1、4、8、16、24及32位圖像等。每個像素使用的信息位數越多,可用的顏色就越多,顏色表現就越逼真,相應的數據量越大。例如,位深度為 1 的像素位圖只有兩個(2的1次方)可能的值(黑色和白色),所以又稱為二值位圖。位深度為 8 的圖像有 2的8次方(即 256)個可能的值。位深度為 8 的灰度模式圖像有 256 個可能的灰色值。

位圖的編碼方式

即 Photoshop 中的 模式(mode),有常見的 RGB、CMYK等。

RGB:用紅、綠、藍三個顏色通道組成,即三原色的光學強度來表示一種顏色。這是最常見的位圖編碼方法,可以直接用於屏幕顯示。8 位/通道的 RGB 圖像中的每個通道有 256 個可能的值,這意味著該圖像有 1600 萬個以上可能的顏色值。有時將帶有 8 位/通道 (bpc) 的 RGB 圖像稱作 24 位圖像(8 位 x 3 通道 = 24 位數據/像素)。

CMYK:用青、品紅、黃、黑四種顏料含量來表示一種顏色。常用的位圖編碼方法之一,可以直接用於彩色印刷。

Python 圖像處理這樣學 小白也易懂,還能順便學習  Photoshop

Photoshop 中 mode 可以觀察或改變圖像顏色模式

常用圖像格式

  • .bmp : windows 位圖,常被 windows 程序使用,比如“畫圖”程序默認保存格式;
  • .tiff :大量的用於傳統影像印刷,可進行有損或無損壓縮;
  • .png :無損壓縮位圖格式。起初被設計用於代替在互聯網上的GIF格式文件;
  • .gif :在網絡上被廣泛使用,但有時也會因為專利權的原因而不使用該圖形格式。支持動畫圖像,支持256色,對真彩圖片進行有損壓縮;
  • .jpeg / .jpg :網絡上廣泛用於存儲照片。使用有損壓縮,圖片質量可根據壓縮的設置而有所不同。

準備工作

Adobe Photoshop ,是為了配合解釋 Python Pillow 操作過程,非必須;

項目目錄,包含圖片若干;

開發工具,Visual Studio Code;

Python 環境,本例配置為 Python 3.7.3 解釋器,且安裝 Pillow 庫,命令行工具 IPython (非必須)。

Python 圖像處理這樣學 小白也易懂,還能順便學習  Photoshop

VS Code 項目目錄

顯示圖片

操作系統觀察圖像信息,以 Windows 10 為例,可以在資源管理器中查看文件名稱或縮略圖。鼠標移到圖像上可以顯示信息,如:類型、分辨率,文件大小等。

Python 圖像處理這樣學 小白也易懂,還能順便學習  Photoshop

Windows 10 查看圖像文件基本信息

圖像文件上右鍵上下文菜單項“屬性”對話框“詳細信息”標籤可以查看更詳細信息。雙擊圖像文件,會使用 Windows 默認關聯的工具打開該圖片。

Python Pillow 打印圖像信息並顯示圖片

Pillow 安裝後,相關組件需要從 PIL 包導入,核心 Image 類定義了“圖像”對象抽象,主要操作均圍繞 Image 類型實例操作

Python 圖像處理這樣學 小白也易懂,還能順便學習  Photoshop

Pillow 顯示圖像基本信息

上例代碼中可以看到

`Image.open()` 用於打開特定圖像文件並獲取實例引用;

img.format 用於獲取圖片格式;

img.size 獲取圖片尺寸屬性,長寬像素,類型為 tuple;

img.mode 圖片模式,本圖 ‘girl.jpg' 為RGB 模式。

如果想使用默認的圖像瀏覽工具打開圖像實例,則可以調用 `img.show()` 方法:

Python 圖像處理這樣學 小白也易懂,還能順便學習  Photoshop

img.show() 顯示圖像

創建縮略圖

在 Web 網站程序中往往需要給一張尺寸較大的圖像製作一縮略圖,單張圖片可以在 Photoshop 中打開原圖,通過 “圖像 (Images)”菜單下的“圖像尺寸(Image Size)”調整寬(Width)、高(Height)後,再導出或另存為實現:

Python 圖像處理這樣學 小白也易懂,還能順便學習  Photoshop

Photoshop 設置圖片尺寸

Pillow Image 對象可以很方便的通過代碼實現縮略圖的製作:

Python 圖像處理這樣學 小白也易懂,還能順便學習  Photoshop

.thumbnail() 方法生成縮略圖

Image.thumbnail(size) 即可生成指定尺寸縮略圖,保存即可,配置循環文件讀取保存可以批量縮略圖生成。

Image.resize(size) 可以重新調整當前圖片尺寸,注意如果新值大於原圖片大小,可能會造成失真現象。

旋轉圖片

Photoshop “圖像”菜單項“圖像旋轉(Image Rotation)”可以設置當前圖像的水平、垂直、90度順時針或逆時針旋轉:

Python 圖像處理這樣學 小白也易懂,還能順便學習  Photoshop

Photoshop 圖像旋轉操作

Python Pillow 中可以使用 Image.rotate(角度數值) 方法或 Image.transpose(常量枚舉) 實現旋轉,二者的區別在於接收參數:

Python 圖像處理這樣學 小白也易懂,還能順便學習  Photoshop

img.rotate() 逆時針旋轉指定角度

Image.rotate() 逆時針旋轉指定數值的角度,注意該方法返回旋轉後的副本,如果分步驟執行 rotate() 再 show() 顯示,此時看到的原來的實例,而非返回的旋轉副本。

Python 圖像處理這樣學 小白也易懂,還能順便學習  Photoshop

transpose() 參數指定預置的90度倍數常量

Image.transpose() 參數非特定的角度數值,而預置的幾個90度倍數的常量值,如:

  • Image.FLIP_LEFT_RIGHT 左右翻轉
  • Image.FLIP_TOP_BOTTOM 上下翻轉
  • Image.ROTATE_90 逆時針90度
  • Image.ROTATE_180 逆時針180度
  • Image.ROTATE_270 逆時針270度

該方法同樣返回旋轉後的副本,本例中將其賦予 out 變量再顯示。

照片去色

如果要將彩色圖像去色可以將其顏色模式轉換為灰度“L”模式,該模式下只有一個8位通道,可以包含0(黑)到255(白色)之間的不同灰度亮度值。

Photoshop 下選擇“模式”下的“灰度(Grayscale)”即可:

Python 圖像處理這樣學 小白也易懂,還能順便學習  Photoshop

Photoshopo 改變圖像模式為“灰度”

Pillow 中只需使用 Image.convert("L") 即可實現等同效果:

Python 圖像處理這樣學 小白也易懂,還能順便學習  Photoshop

img.conert() 轉換圖片模式

截止目前,我們對比介紹了 Python Pillow 庫下的幾個常用基礎操作,Pillow 自身的功能十分強大,在圖像處理領域的讀寫、裁剪、剪切、合併、顏色處理、濾鏡特效,也均可以通過簡單的 API 實現。本文拋磚引玉,消除初學者對圖像處理的神祕感,有興趣的同學,可以深入學習。

如果您想系統學習 Python 語言基礎知識,歡迎試聽報名我們的專欄課程:

往期文章:

當 Python 遇上 Excel,理解面向對象讓你的開發事半功倍

Python Lambda 除了會定義執行,還應知道用在哪些編程場景中

當 PyCharm 遇上思維導圖,有條理的開發者不能錯過

Visual Studio Code 開發 Python,這幾個擴展你應該瞭解

相關推薦

推薦中...