开放的编程资料库

当前位置:我爱分享网 > Python教程 > 正文

Python 使用 Pillow

Pillow教程展示了如何在Python中使用Pillow来处理图像。源代码可在作者的Github存储库中找到。

枕头

Pillow是一个Python图像库(PIL),它增加了对打开、操作和保存图像的支持。当前版本识别和读取大量格式。写入支持有意限制为最常用的交换和表示格式。

枕头秀图片

在第一个示例中,我们读取一个图像文件并在外部程序中显示它。

#!/usr/bin/python

from PIL import Image
import sys

try:
    tatras = Image.open("tatras.jpg")

except IOError:
    print("Unable to load image")
    sys.exit(1)
    
tatras.show()

程序读取JPG图像并将其显示在外部应用程序中。

from PIL import Image

在PIL模块中,我们包含了Image类。

tatras = Image.open("tatras.jpg")

Image.open方法读取图像文件。Pillow可以读取30多种不同的文件格式。

tatras.show()

show方法主要用于调试目的。它将图像保存到一个临时文件中并在外部程序中显示。这可能是Linux上的ImageMagic或Windows上的Paint。

带Pillow的基本图片信息

Pillow允许我们获取图像的一些基本信息。

#!/usr/bin/python

from PIL import Image
import sys

try:
    tatras = Image.open("tatras.jpg")

except IOError:
    print("Unable to load image")
    sys.exit(1)
    
print("Format: {0}\nSize: {1}\nMode: {2}".format(tatras.format, 
    tatras.size, tatras.mode))

该示例使用Pillow打印有关图像的基本信息。

print("Format: {0}\nSize: {1}\nMode: {2}".format(tatras.format, 
    tatras.size, tatras.mode)) 

我们打印图像格式、大小和模式。

$ ./basic_info.py 
Format: JPEG
Size: (350, 232)
Mode: RGB

枕头模糊图像

ImageFilter模块包含一组预定义过滤器的定义,可以与filter方法一起使用。

#!/usr/bin/python

from PIL import Image, ImageFilter
import sys

try:
    img = Image.open("tatras.jpg")
    
except IOError:
    print("Unable to load image")    
    sys.exit(1)

blurred = img.filter(ImageFilter.BLUR)

blurred.save("blurred.png")

程序加载图像,从原始图像创建模糊图像,并将新图像保存在磁盘上。

from PIL import Image, ImageFilter

我们导入ImageImageFilter模块。

blurred = img.filter(ImageFilter.BLUR)

我们在原始图像上应用ImageFilter.BLUR;该操作返回一个新的修改后的图像。

blurred.save("blurred.png")

使用save方法,我们将模糊图像保存在磁盘上。

使用Pillow转换图像

使用save方法,我们可以将图像转换为不同的格式。

#!/usr/bin/python

from PIL import Image
import sys

try:
    tatras = Image.open("tatras.jpg")

except IOError:
    print("Unable to load image")
    sys.exit(1)

tatras.save('tatras.png', 'png')  

程序读取JPG图像并将其转换为PNG格式。

tatras.save('tatras.png', 'png')  

save方法的第二个参数指定图像格式。

枕头灰度图像

使用Image.convert方法,我们可以生成黑白图像。

#!/usr/bin/python

from PIL import Image
import sys

try:
    tatras = Image.open("tatras.jpg")
    
except IOError:
    print("Unable to load image")
    sys.exit(1)
    
grayscale = tatras.convert('L')
grayscale.show()

程序读取图像并将其转换为灰度图像。

grayscale = tatras.convert('L')

convert方法的第一个参数是模式;’L’模式是黑色和白色。

使用Pillow裁剪图像

Image.crop裁剪图像。

#!/usr/bin/python

from PIL import Image
import sys

try:
    tatras = Image.open("tatras.jpg")

except IOError:
    print("Unable to load image")
    sys.exit(1)
    
cropped = tatras.crop((100, 100, 350, 350))
cropped.save('tatras_cropped.jpg')

程序裁剪图像。裁剪后的图像保存在磁盘上。

cropped = tatras.crop((100, 100, 350, 350))

crop方法采用定义左、上、右和下像素坐标的4元组。

用枕头旋转图像

Image.rotate返回图像的旋转副本。

#!/usr/bin/python

from PIL import Image
import sys

try:
    tatras = Image.open("tatras.jpg")

except IOError:
    print("Unable to load image")
    sys.exit(1)
    
rotated = tatras.rotate(180)
rotated.save('tatras_rotated.jpg') 

程序将图像旋转180度并将新创建的图像保存在磁盘上。

在Tkinter中显示图像

以下程序在Tkinter程序中显示图像。

#!/usr/bin/python

from PIL import Image, ImageTk
from tkinter import Tk
from tkinter.ttk import Frame, Label
import sys

class Example(Frame):
  
    def __init__(self):
        super().__init__()   
         
        self.loadImage() 
        self.initUI()
        
        
    def loadImage(self):
        try:
            self.img = Image.open("tatrs.jpg")

        except IOError:
            print("Unable to load image")
            sys.exit(1)
        
    
    def initUI(self):
      
        self.master.title("Label")
        
        tatras = ImageTk.PhotoImage(self.img)
        label = Label(self, image=tatras)
        
        # reference must be stored
        label.image = tatras
        
        label.pack()
        self.pack()
        
        
    def setGeometry(self):
      
        w, h = self.img.size
        self.master.geometry(("%dx%d+300+300") % (w, h))
        

def main():
  
    root = Tk()
    ex = Example()
    ex.setGeometry()
    root.mainloop()  


if __name__ == '__main__':
    main()  

该程序在Tkinter工具包的Label小部件中显示图像。

from PIL import Image, ImageTk

ImageTk是与Tkinter兼容的照片图像。它可以在Tkinter需要图像对象的任何地方使用。

tatras = ImageTk.PhotoImage(self.img)

我们创建照片图像。

label = Label(self, image=tatras)

照片图像被提供给标签小部件的image参数。

label.image = tatras

为了不被垃圾收集,必须存储图像引用。

w, h = self.img.size
self.master.geometry(("%dx%d+300+300") % (w, h))

窗口的大小适合图像大小。

从URL读取图片

下一个示例从URL读取图像。

#!/usr/bin/python

from PIL import Image
import requests
import sys

url = 'https://i.ytimg.com/vi/vEYsdh6uiS4/maxresdefault.jpg'

try:
    resp = requests.get(url, stream=True).raw

except requests.exceptions.RequestException as e:  
    sys.exit(1)

try:
    img = Image.open(resp)

except IOError:
    print("Unable to open image")
    sys.exit(1)

img.save('sid.jpg', 'jpeg')    

该示例从URL中读取图像并将其保存在磁盘上。

import requests

我们使用requests库来下载图片。

resp = requests.get(url, stream=True).raw

我们读取图像作为原始数据。

img = Image.open(resp)

Image是从响应对象创建的。

img.save('sid.jpg', 'jpeg')

图像已保存。

绘制到枕头图像

Pillow具有一些基本的2D图形功能。ImageDraw模块为Image对象提供简单的二维图形。我们可以创建新图像、注释或修饰现有图像,并即时生成图形以供网络使用。

#!/usr/bin/python

from PIL import Image, ImageDraw

img = Image.new('RGBA', (200, 200), 'white')    
idraw = ImageDraw.Draw(img)

idraw.rectangle((10, 10, 100, 100), fill='blue')
 
img.save('rectangle.png')

该示例创建了一个新图像并在该图像上绘制了一个蓝色矩形。

img = Image.new('RGBA', (200, 200), 'white') 

创建了一个新的Image。图像模式是’RGBA’。它的大小为200×200,背景为白色。

idraw = ImageDraw.Draw(img)

我们根据图像创建ImageDraw对象。现在我们可以对图像进行一些绘图操作了。

idraw.rectangle((10, 10, 100, 100), fill='blue')

使用rectangle方法,我们在图像上绘制一个蓝色矩形。

使用Pillow创建水印

以下示例创建水印。

#!/usr/bin/python

from PIL import Image, ImageDraw, ImageFont
import sys

try:
    tatras = Image.open("tatras.jpg")

except:
    print("Unable to load image")
    sys.exit(1)
    
idraw = ImageDraw.Draw(tatras)
text = "High Tatras"

font = ImageFont.truetype("arial.ttf", size=18)

idraw.text((10, 10), text, font=font)
 
tatras.save('tatras_watermarked.png')

我们使用ImageDraw模块来创建水印。

font = ImageFont.truetype("arial.ttf", size=18)

我们创建一个18号的Arial字体。

idraw.text((10, 10), text, font=font)

水印是用text方法创建的。文本的默认颜色是白色。我们使用创建的字体。

图:高塔特拉山

在本教程中,我们使用了PythonPillow库。

访问Python教程或列出所有Python教程。

未经允许不得转载:我爱分享网 » Python 使用 Pillow

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏