python圖像操作的庫pil,python繪製圖形的庫

本文目錄一覽:

Python:這有可能是最詳細的PIL庫基本概念文章了

PIL有如下幾個模塊:Image模塊、ImageChops模塊、ImageCrackCode模塊、ImageDraw模塊、ImageEnhance模塊、ImageFile模塊、ImageFileIO模塊、ImageFilter模塊、ImageFont模塊、ImageGrab模塊、ImageOps模塊、ImagePath模塊、ImageSequence模塊、ImageStat模塊、ImageTk模塊、ImageWin模塊、PSDraw模塊

啊啊啊啊怎麼這麼多模塊啊~~~!!!!

別擔心我為你一一講解

Image模塊提供了一個相同名稱的類,即image類,用於表示PIL圖像。

Image模塊是PIL中最重要的模塊 ,比如創建、打開、顯示、保存圖像等功能,合成、裁剪、濾波等功能,獲取圖像屬性功能,如圖像直方圖、通道數等。

Image模塊的使用如下:

ImageChops模塊包含一些算術圖形操作,這些操作可用於諸多目的,比如圖像特效,圖像組合,演算法繪圖等等,通道操作只用於8點陣圖像。

ImageChops模塊的使用如下:

由於圖像im_dup是im的複製過來的,所以它們的差為0,圖像im_diff顯示時為黑圖。

ImageCrackCode模塊允許用戶檢測和測量圖像的各種特性。 這個模塊只存在於PIL Plus包中。

因為我目前安裝的PIL中沒有包含這個模塊。所以就不詳細介紹了

ImageDraw模塊為image對象提供了基本的圖形處理功能。 例如,它可以創建新圖像,注釋或潤飾已存在圖像,為web應用實時產生各種圖形。

ImageDraw模塊的使用如下:

在del draw前後顯示出來的圖像im是完全一樣的,都是在原有圖像上畫了兩條對角線。

原諒我的報錯

ImageEnhance模塊包括一些用於圖像增強的類。它們分別為 Color類、Brightness類、Contrast類和Sharpness類。

ImageEnhance模塊的使用如下:

圖像im0的亮度為圖像im的一半。

ImageFile模塊為圖像打開和保存功能提供了相關支持功能。另外,它提供了一個Parser類,這個類可以一塊一塊地對一張圖像進行解碼(例如,網路聯接中接收一張圖像)。這個類的介面與標準的sgmllib和xmllib模塊的介面一樣。

ImageFile模塊的使用如下:

因為所打開圖像大小大於1024個byte,所以報錯:圖像不完整。

所以大家想看的可以自行去找一個小一點的圖看一下

ImageFileIO模塊用於從一個socket或者其他流設備中讀取一張圖像。 不贊成使用這個模塊。 在新的code中將使用ImageFile模塊的Parser類來代替它。

ImageFilter模塊包括各種濾波器的預定義集合,與Image類的filter方法一起使用。該模塊包含這些圖像增強的濾器:BLUR,CONTOUR,DETAIL,EDGE_ENHANCE,EDGE_ENHANCE_MORE,EMBOSS,FIND_EDGES,SMOOTH,SMOOTH_MORE和SHARPEN。

ImageFilter模塊的使用如下:

ImageFont模塊定義了一個同名的類,即ImageFont類。這個類的實例中存儲著bitmap字體,需要與ImageDraw類的text方法一起使用。

PIL使用自己的字體文件格式存儲bitmap字體。用戶可以使用pilfont工具包將BDF和PCF字體描述器(Xwindow字體格式)轉換為這種格式。

PIL Plus包中才會支持矢量字體。

ImageGrab模塊用於將屏幕上的內容拷貝到一個PIL圖像內存中。 當前的版本只在windows操作系統上可以工作。

ImageGrab模塊的使用如下:

圖像im顯示出筆記本當前的窗口內容,就是類似於截圖的工具

ImageOps模塊包括一些「ready-made」圖像處理操作。 它可以完成直方圖均衡、裁剪、量化、鏡像等操作 。大多數操作只工作在L和RGB圖像上。

ImageOps模塊的使用如下:

圖像im_flip為圖像im垂直方向的鏡像。

ImagePath模塊用於存儲和操作二維向量數據。Path對象將被傳遞到ImageDraw模塊的方法中。

ImagePath模塊的使用如下:

ImageSequence模塊包括一個wrapper類,它為圖像序列中每一幀提供了迭代器。

ImageSequence模塊的使用如下:

後面兩次show()函數調用,分別顯示第1張和第11張圖像。

ImageStat模塊計算一張圖像或者一張圖像的一個區域的全局統計值。

ImageStat模塊的使用如下:

ImageTk模塊用於創建和修改BitmapImage和PhotoImage對象中的Tkinter。

ImageTk模塊的使用如下:

這個是我一直不太懂的有沒有大佬能幫我解決一下在線等~急!

PSDraw模塊為Postscript印表機提供基本的列印支持。用戶可以通過這個模塊列印字體,圖形和圖像。

PIL中所涉及的基本概念有如下幾個: 通道(bands)、模式(mode)、尺寸(size)、坐標系統(coordinate system)、調色板(palette)、信息(info)和濾波器(filters)。

每張圖片都是由一個或者多個數據通道構成。PIL允許在單張圖片中合成相同維數和深度的多個通道。

以RGB圖像為例,每張圖片都是由三個數據通道構成,分別為R、G和B通道。而對於灰度圖像,則只有一個通道。

對於一張圖片的通道數量和名稱,可以通過getbands()方法來獲取。getbands()方法是Image模塊的方法,它會返回一個字元串元組(tuple)。該元組將包括每一個通道的名稱。

Python的元組與列表類似,不同之處在於元組的元素不能修改,元組使用小括弧,列表使用方括弧,元組創建很簡單,只需要在括弧中添加元素,並使用逗號隔開即可。

getbands()方法的使用如下:

圖像的模式定義了圖像的類型和像素的位寬。當前支持如下模式:

1:1位像素,表示黑和白,但是存儲的時候每個像素存儲為8bit。

L:8位像素,表示黑和白。

P:8位像素,使用調色板映射到其他模式。

I:32位整型像素。

F:32位浮點型像素。

RGB:3×8位像素,為真彩色。

RGBA:4×8位像素,有透明通道的真彩色。

CMYK:4×8位像素,顏色分離。

YCbCr:3×8位像素,彩色視頻格式。

PIL也支持一些特殊的模式,包括RGBX(有padding的真彩色)和RGBa(有自左乘alpha的真彩色)。

可以通過mode屬性讀取圖像的模式。其返回值是包括上述模式的字元串。

mode 屬性 的使用如下:

通過size屬性可以獲取圖片的尺寸。這是一個二元組,包含水平和垂直方向上的像素數。

mode屬性的使用如下:

PIL使用笛卡爾像素坐標系統,坐標(0,0)位於左上角。注意:坐標值表示像素的角;位於坐標(0,0)處的像素的中心實際上位於(0.5,0.5)。

坐標經常用於二元組(x,y)。長方形則表示為四元組,前面是左上角坐標。例如:一個覆蓋800×600的像素圖像的長方形表示為(0,0,800,600)。

調色板模式 (“P”)使用一個顏色調色板為每個像素定義具體的顏色值

使用info屬性可以為一張圖片添加一些輔助信息。這個是字典對象。載入和保存圖像文件時,多少信息需要處理取決於文件格式。

info屬性的使用如下:

對於將多個輸入像素映射為一個輸出像素的幾何操作,PIL提供了4個不同的採樣濾波器:

NEAREST:最近濾波。 從輸入圖像中選取最近的像素作為輸出像素。它忽略了所有其他的像素。

BILINEAR:雙線性濾波。 在輸入圖像的2×2矩陣上進行線性插值。注意:PIL的當前版本,做下採樣時該濾波器使用了固定輸入模板。

BICUBIC:雙立方濾波。 在輸入圖像的4×4矩陣上進行立方插值。注意:PIL的當前版本,做下採樣時該濾波器使用了固定輸入模板。

ANTIALIAS:平滑濾波。 這是PIL 1.1.3版本中新的濾波器。對所有可以影響輸出像素的輸入像素進行高質量的重採樣濾波,以計算輸出像素值。在當前的PIL版本中,這個濾波器只用於改變尺寸和縮略圖方法。

注意:在當前的PIL版本中,ANTIALIAS濾波器是下採樣 (例如,將一個大的圖像轉換為小圖) 時唯一正確的濾波器。 BILIEAR和BICUBIC濾波器使用固定的輸入模板 ,用於固定比例的幾何變換和上採樣是最好的。Image模塊中的方法resize()和thumbnail()用到了濾波器。

resize()方法的定義為:resize(size, filter=None)= image

resize()方法的使用如下:

對參數filter不賦值的話,resize()方法默認使用NEAREST濾波器。如果要使用其他濾波器可以通過下面的方法來實現:

thumbnail ()方法的定義為:im.thumbnail(size, filter=None)

thumbnail ()方法的使用如下:

這裡需要說明的是,方法thumbnail()需要保持寬高比,對於size=(200,200)的輸入參數,其最終的縮略圖尺寸為(182, 200)。

對參數filter不賦值的話,方法thumbnail()默認使用NEAREST濾波器。如果要使用其他濾波器可以通過下面的方法來實現:

python如何安裝pil庫

PIL:Python Imaging Library,已經是Python平台事實上的圖像處理標準庫了。

由於PIL僅支持到Python 2.7,加上年久失修,於是一群志願者在PIL的基礎上創建了兼容的版本,名字叫Pillow,支持最新Python 3.x,又加入了許多新特性,因此,我們可以直接安裝使用Pillow。

安裝Python時已經把pip3也備好了,可以直接使用pip3安裝PIL

命令行:pip3 install pillow

注意:

1.PIL安裝包名字的pillow

2.使用pip3命令時,是要在pip3.exe所在路徑下才能執行。一般pip3.exe是在python安裝目錄下的Script文件夾中。

更多Python相關技術文章,請訪問Python教程欄目進行學習!以上就是小編分享的關於python如何安裝pil庫的詳細內容希望對大家有所幫助,更多有關python教程請關注環球青藤其它相關文章!

1.圖像裁剪、加邊框、旋轉(Python PIL)

        日常工作中經常要用Photoshop列印一些地質圖,雖然說PS有動作錄製的功能,但是列印這個功能我嘗試過錄製動作後並未能成功運行,而且要列印的圖像尺寸很多都是不同的,試了幾次後就放棄了,直到後來Python學起來了,通過pywinauto庫實現了這個功能,在這裡就簡單記錄下吧。

        在寫Photoshop的列印操作之前,先來回顧下列印之前的圖像處理工作。

        接到的地質圖多為MapGIS程序導出的jpg圖片,偶爾也會有Tif格式的遙感圖。對這些圖像進行列印很簡單,基本流程是:用PS打開圖像-裁剪圖像四周空白邊緣-為圖像四周加上3cm寬白色邊框(為了美觀和裝訂的需要)-列印。那為啥用PS來列印不直接用Windows自帶列印呢,應該是列印需要用到PS特定的顏色處理模式吧,經過試驗,通過兩種方式打出來的色彩效果確實是不同的。

        列印前圖像處理的主要目標很簡單:

                1、裁剪圖像四周空白

                2、為圖像四周加上3cm白色邊框   

下面就用Python實現它們

圖像處理主要用的是PIL這個庫,中途由於單位電腦比較舊(4g內存Win7 32位系統,後來重裝成64位了,體驗就是搞這種東西必須整個64位系統),性能不太行了,也用Opencv整了下,還是感覺PIL稍微快那麼一點點,不知道是不是錯覺呢。

(後來發現這兩步在PS錄個動作也能輕鬆完成(→ܫ←))

一、獲取所有圖片路徑

        有時候要列印的圖片會放在好多個不同文件夾裡面,要把它們遍歷出來:

import os

二、讀取圖片並裁剪四周空白

import PIL

獲得了圖像尺寸後接下來就要對圖像進行邊緣空白的裁剪了(其實這兩步不分先後順序的):

裁剪的思路是網上搜到的,整理下就是:

    1、先把圖像轉成灰度模式(值變成單一的0-255以方便判斷,如果要裁剪其他顏色我就不知道了,我這裡只要裁掉最常見的由MapGIS導出的標準的白色邊緣)。

    2、分別從四個方向掃描圖像,找到四個方向各自第一個灰度值不為255(最純粹的白色(→ܫ←))的像素,記下它的坐標(i,j)。

    3、通過四組坐標大小比較,得到圖像除了四周空白區域外的坐標極值,也就得到了裁剪的區域左上(left,top)和右下坐標(right,bottom)。

    4、利用PIL.Image.crop(),完成圖像的裁剪。

    5、沒了,就是後來發現PIL自帶這個演算法,引用一下: 使用PIL裁剪圖片白邊

        要是用PS來做呢,『圖像-裁切-確定』就完事了。

三、給裁剪後的圖像加上x厘米的白色邊框

這一步主要是為了列印出來的圖規範且美觀。

這一步要是用PS來搞,『圖像-畫布大小-設置相對的寬度和高度』 就好了

四、判斷圖像是否需要旋轉。

為什麼要旋轉這些圖像呢?因為最終是要把它們用印表機列印出來,而印表機能列印的最大寬度是有限的,所以就有了這個步驟。

單位的印表機型號是惠普的HP DesignJet Z6200 60 英寸照片印表機,最大列印紙張寬度是60英寸,大約就是1524mm左右吧,除了最大尺寸外,日常還用到的紙張寬度有440、610、914、1067、1274等6、7種吧,所以出於節約列印時間和省錢的考慮,為每張圖選擇最合適的列印紙張寬度也是很有必要的。

判斷圖像是否需要旋轉的思路是這樣的:

    1、比較圖像的寬和高,判斷誰是圖像的長邊和短邊。

    2、短邊如果大於1524mm,這圖按1:1就打不出來了,超過印表機最大可裝入的紙張的寬度,把這個圖像文件放到Oversize_path路徑下,後續自己看著辦。

    3、在短邊小於等於1524mm的前提下,根據對圖像寬高和長短邊的比較,有兩種需要旋轉的情況:

            3.1 如果圖像的寬是長邊(矮胖的矩形),且寬大於1524mm,那麼這圖得旋轉90°;

            3.2 如果圖像的高是長邊(瘦高的矩形),且高小於1524mm,那麼這圖也得旋轉90°。

*printTOtkinter()是個用tkinter搞的進度顯示窗口,就輸出下一些文本信息而已。

五、為圖像選擇最合適的列印紙張尺寸

單位列印紙有438、610、914、1524等7種寬度,現在要選出最適合的一種來進行列印。

在把短邊大於1524這種情況排除之後,剩下的圖像情況為短邊小於1524,即單位的印表機能列印出來了。

這時要判斷最佳列印用紙的寬度,有兩種情況需要考慮:

    1、長邊>1524,改用短邊來比較選擇列印紙寬度。

    2、長邊 ≤ 1524,用長邊來比較選擇列印紙寬度。

下面思路就是把要用作比較的邊長放入紙張寬度列表,把列表排序後找到比這個邊長大一點的那個紙張寬度。

主要的步驟就是這些,再經過一頓複製粘貼完善一下其他細節之後,最後會得到一個存放列印信息的列表,把它用txt存起來,這樣後面的PS批量列印需要的信息就全部搞到手了。最後放個gif。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/181472.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-23 06:40
下一篇 2024-11-23 06:40

相關推薦

  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29

發表回復

登錄後才能評論