Gối Python - Hướng dẫn nhanh

Trong thế giới kỹ thuật số ngày nay, chúng ta bắt gặp rất nhiều hình ảnh kỹ thuật số. Trong trường hợp, chúng tôi đang làm việc với ngôn ngữ lập trình Python, nó cung cấp rất nhiều thư viện xử lý ảnh để bổ sung khả năng xử lý ảnh cho ảnh kỹ thuật số.

Một số thư viện xử lý ảnh phổ biến nhất là: OpenCV, Python Imaging Library (PIL), Scikit-image, Pillow. Tuy nhiên, trong hướng dẫn này, chúng tôi chỉ tập trung vàoPillow module và sẽ cố gắng khám phá các khả năng khác nhau của mô-đun này.

Pillow được xây dựng dựa trên PIL (Thư viện hình ảnh Python). PIL là một trong những mô-đun quan trọng để xử lý hình ảnh bằng Python. Tuy nhiên, mô-đun PIL không được hỗ trợ kể từ năm 2011 và không hỗ trợ python 3.

Mô-đun Pillow cung cấp nhiều chức năng hơn, chạy trên tất cả các hệ điều hành chính và hỗ trợ cho python 3. Nó hỗ trợ nhiều loại hình ảnh như “jpeg”, “png”, “bmp”, “gif”, “ppm”, “tiff”. Bạn có thể làm hầu hết mọi thứ trên hình ảnh kỹ thuật số bằng cách sử dụng mô-đun gối. Ngoài chức năng xử lý hình ảnh cơ bản, bao gồm các phép toán điểm, lọc hình ảnh bằng cách sử dụng nhân chập tích hợp và chuyển đổi không gian màu.

Lưu trữ Hình ảnh

Thư viện hình ảnh Python phù hợp nhất cho các ứng dụng lưu trữ hình ảnh và xử lý hàng loạt. Gói gối Python có thể được sử dụng để tạo hình thu nhỏ, chuyển đổi từ định dạng này sang định dạng khác và in hình ảnh, v.v.

Hiển thị hình ảnh

Bạn có thể hiển thị hình ảnh bằng giao diện Tk PhotoImage, BitmapImage và Windows DIB, có thể được sử dụng với PythonWin và các bộ công cụ dựa trên Windows và nhiều bộ công cụ Giao diện Người dùng Đồ họa (GUI) khác.

Đối với mục đích gỡ lỗi, có một phương thức show () để lưu hình ảnh vào đĩa gọi tiện ích hiển thị bên ngoài.

Đang xử lý hình ảnh

Thư viện Pillow chứa tất cả các chức năng xử lý hình ảnh cơ bản. Bạn có thể thay đổi kích thước, xoay và chuyển đổi hình ảnh.

Mô-đun Pillow cho phép bạn kéo một số dữ liệu thống kê ra khỏi hình ảnh bằng phương pháp biểu đồ, sau này có thể được sử dụng để phân tích thống kê và tăng cường độ tương phản tự động.

Chương này thảo luận về cách cài đặt gói gối trong máy tính của bạn.

Việc cài đặt gói gối rất dễ dàng, đặc biệt nếu bạn đang cài đặt bằng pip.

Cài đặt Pillow bằng pip

Để cài đặt gối bằng pip, chỉ cần chạy lệnh dưới đây trong dấu nhắc lệnh của bạn -

python -m pip install pip
python -m pip install pillow

Trong trường hợp, nếu pip và gối đã được cài đặt trong máy tính của bạn, các lệnh trên sẽ chỉ đề cập đến 'requirement already satisfied'như hình dưới đây -

Để hiển thị hình ảnh, thư viện gối đang sử dụng một lớp hình ảnh bên trong nó. Mô-đun hình ảnh bên trong gói gối chứa một số chức năng sẵn có quan trọng như tải hình ảnh hoặc tạo hình ảnh mới, v.v.

Mở, xoay và hiển thị hình ảnh

Để tải hình ảnh, chúng tôi chỉ cần nhập mô-đun hình ảnh từ gối và gọi Image.open(), chuyển tên tệp hình ảnh.

Thay vì gọi mô-đun Pillow, chúng tôi sẽ gọi mô-đun PIL để làm cho nó tương thích ngược với một mô-đun cũ hơn được gọi là Thư viện ảnh Python (PIL). Đó là lý do tại sao mã của chúng tôi bắt đầu bằng“from PIL import Image” thay vì “from Pillow import Image”.

Tiếp theo, chúng tôi sẽ tải hình ảnh bằng cách gọi Image.open() function, trả về một giá trị của kiểu dữ liệu đối tượng Hình ảnh. Bất kỳ sửa đổi nào chúng tôi thực hiện đối với đối tượng hình ảnh có thể được lưu vào tệp hình ảnh vớisave()phương pháp. Đối tượng hình ảnh mà chúng tôi nhận được bằng cách sử dụngImage.open(), sau này có thể được sử dụng để thay đổi kích thước, cắt, vẽ hoặc các lệnh gọi phương thức thao tác hình ảnh khác trên đối tượng Hình ảnh này.

Thí dụ

Ví dụ sau minh họa việc xoay một hình ảnh bằng cách sử dụng gối con trăn:

from PIL import Image
#Open image using Image module
im = Image.open("images/cuba.jpg")
#Show actual Image
im.show()
#Show rotated Image
im = im.rotate(45)
im.show()

Đầu ra

Nếu bạn lưu chương trình trên dưới dạng example.py và thực thi, chương trình sẽ hiển thị các hình ảnh gốc và được xoay bằng tiện ích hiển thị PNG tiêu chuẩn, như sau:

Actual image

Rotated image (45 degrees)

Các thuộc tính của mô-đun hình ảnh

Thể hiện của lớp Image có một số thuộc tính. Hãy thử tìm hiểu một vài trong số chúng bằng ví dụ -

Image.filename

Hàm này dùng để lấy tên tệp hoặc đường dẫn của ảnh.

>>>image = Image.open('beach1.jpg')
>>> image.filename
'beach1.jpg'

Định dạng hình ảnh

Hàm này trả về định dạng tệp của tệp hình ảnh như 'JPEG', 'BMP', 'PNG', v.v.

>>> image = Image.open('beach1.jpg')
>>>
>>> image.format
'JPEG'

Chế độ ảnh

Nó được sử dụng để lấy định dạng pixel được sử dụng bởi hình ảnh. Các giá trị điển hình là “1”, “L”, “RGB” hoặc “CMYK”.

>>> image.mode
'RGB'

Kích thước ảnh

Nó trả về bộ giá trị bao gồm chiều cao và trọng lượng của hình ảnh.

>>> image.size
(1280, 721)

Chiều rộng hình ảnh

Nó chỉ trả về chiều rộng của hình ảnh.

>>> image.width
1280

Image.height

Nó chỉ trả về chiều cao của hình ảnh.

>>> image.height
721

Image.info

Nó trả về một từ điển chứa dữ liệu được liên kết với hình ảnh.

>>> image.info
{'jfif': 257, 'jfif_version': (1, 1), 'dpi': (300, 300), 'jfif_unit': 1, 'jfif_density': (300, 300), 'exif': b"Exif\x00\x00MM\x00*\x00\x00\x00
....
....
\xeb\x00\x00'\x10\x00\x00\xd7\xb3\x00\x00\x03\xe8"}

Image.palette

Nó trả về bảng bảng màu, nếu có.

>>> image.palette

Output above - Không có

Chương này trình bày chi tiết về các chủ đề bao gồm cách đọc và lưu hình ảnh trong Pillow.

Đọc hình ảnh

Đọc và viết hình ảnh bằng thư viện gối rất đơn giản, với sự trợ giúp của PIL.Image module function.

Cú pháp

Image.open(fp, mode=’r’)

Ở đâu

  • fp- Tên tệp (chuỗi), đối tượng pathlib.Path hoặc một đối tượng tệp. Đối tượng tệp phải triển khai các phương thức read (), seek () và tell () và được mở ở chế độ nhị phân.

  • mode - Đó là một đối số tùy chọn, nếu được đưa ra, phải là 'r'.

  • Return value - Một đối tượng Image.

  • Error - Nếu không tìm thấy tệp, hoặc không thể mở và xác định hình ảnh.

Thí dụ

Sau đây là một ví dụ rất đơn giản, nơi chúng tôi sẽ mở một hình ảnh có định dạng bất kỳ (Chúng tôi đang sử dụng.jpg), hiển thị nó trong một cửa sổ và sau đó lưu nó (vị trí mặc định) với định dạng tệp khác (.png).

from PIL import Image
image = Image.open('beach1.jpg')
image.show()
image.save('beach1.bmp')
image1 = Image.open('beach1.bmp')
image1.show()

Trong ví dụ trên, chúng tôi nhập mô-đun Hình ảnh từ thư viện PIL và sau đó, gọi Image.open()chức năng đọc hình ảnh từ đĩa trả về kiểu dữ liệu đối tượng hình ảnh. Nó sẽ tự động xác định loại tệp bằng cách xem nội dung tệp. Để đọc,open() hàm chấp nhận một filename(string), một path object hoặc một image(file) vật.

Vì vậy, bằng cách sử dụng hàm open (), chúng ta thực sự đang đọc hình ảnh. Image.open () sẽ đọc hình ảnh và lấy tất cả thông tin liên quan từ hình ảnh.

Đầu ra

Nếu bạn lưu chương trình trên dưới dạng example.py và thực thi, chương trình sẽ hiển thị các hình ảnh gốc (.jpg) và đã lưu lại (.bmp) bằng cách sử dụng tiện ích hiển thị PNG tiêu chuẩn, như sau:

Actual image

Resaved image (.bmp)

Lưu hình ảnh

Hàm save () ghi hình ảnh vào tệp. Giống như đối với hàm read (open ()), hàm save () chấp nhận tên tệp, đối tượng đường dẫn hoặc đối tượng tệp đã được mở để ghi.

Cú pháp

Image.save(fp, format=None, **params)

Ở đâu,

  • fp - Tên tệp (chuỗi), đối tượng pathlib.Path hoặc đối tượng tệp.

  • format- Ghi đè định dạng tùy chọn. Nếu bị bỏ qua, định dạng sẽ sử dụng được xác định từ phần mở rộng tên tệp. Nếu một đối tượng tệp được sử dụng thay vì tên tệp, thì tham số này phải luôn được sử dụng.

  • options - Các thông số bổ sung cho trình ghi hình ảnh.

  • Return value - Không có

  • KeyError - Nếu không thể xác định định dạng đầu ra từ tên tệp, hãy sử dụng tùy chọn định dạng để giải quyết vấn đề này.

  • IOError - Nếu tệp không thể được ghi, tệp có thể đã được tạo và có thể chứa một phần dữ liệu.

Tóm lại, cú pháp trên sẽ lưu hình ảnh dưới tên tệp đã cho. Nếu không có định dạng nào được chỉ định, thì nó dựa trên phần mở rộng tên tệp hiện tại. Để cung cấp các hướng dẫn bổ sung cho người viết, chúng tôi sử dụng các tùy chọn từ khóa.

image.save('beach1.bmp')

Trong ví dụ trên, nó lưu tệp dựa trên phần mở rộng tệp để xác định loại hình ảnh, chẳng hạn - ở trên sẽ tạo tệp bmp trong thư mục làm việc hiện tại của chúng ta.

Bạn cũng có thể chỉ định rõ ràng loại tệp dưới dạng tham số thứ hai -

image.save('beach1.gif', 'GIF')

Đôi khi, yêu cầu tất cả các hình ảnh có chiều cao và chiều rộng bằng nhau. Một cách để đạt được điều này là tạo một hình thu nhỏ của tất cả các hình ảnh bằng cách sử dụng hàm thumbnail () từ thư viện gối.

Phương pháp này sửa đổi hình ảnh để chứa phiên bản hình thu nhỏ của chính nó và kích thước của hình ảnh sẽ không lớn hơn kích thước đã cho.

Phương thức tính toán kích thước hình thu nhỏ thích hợp để bảo toàn khía cạnh của hình ảnh, gọi draft () method để định cấu hình trình đọc tệp (nếu có) và cuối cùng, thay đổi kích thước hình ảnh.

Cú pháp

Image.thumbnail(size, resample=3)

Ở đâu,

  • Size - Kích thước yêu cầu

  • Resample- Bộ lọc lấy mẫu lại tùy chọn. Nó có thể là một trong những PIL.Image.NEAREST, PIL.Image.BILINEAR, PIL.Image.BICUBIC hoặc PIL.Image.LANCZOS. Nếu bỏ qua, nó sẽ mặc định là PIL.Image.BICUBIC.

  • Returns - Không có

Thí dụ

Ví dụ sau minh họa việc tạo hình thu nhỏ bằng gối trăn:

from PIL import Image
def tnails():
   try:
      image = Image.open('images/cat.jpg')
      image.thumbnail((90,90))
      image.save('images/thumbnail.jpg')
      image1 = Image.open('images/thumbnail.jpg')
      image1.show()
   except IOError:
      pass
tnails()

Đầu ra

Nếu bạn lưu chương trình trên dưới dạng example.py và thực thi, nó sẽ hiển thị hình thu nhỏ đã tạo bằng tiện ích hiển thị PNG mặc định, như sau:

Original image

Output image

Gói gối cho phép bạn dán một hình ảnh lên một hình khác. Hàm merge () chấp nhận một chế độ và nhiều hình ảnh làm tham số và kết hợp chúng thành một hình ảnh duy nhất.

Cú pháp

Image.merge(mode, bands)

Ở đâu,

  • mode - Chế độ sử dụng cho hình ảnh đầu ra.

  • bands - Một chuỗi chứa một hình ảnh băng tần đơn cho mỗi băng tần trong hình ảnh đầu ra. Tất cả các dải phải có cùng kích thước.

  • Return value - Đối tượng An Image.

Sử dụng hàm merge (), bạn có thể hợp nhất các dải RGB của hình ảnh dưới dạng:

from PIL import Image
image = Image.open("beach1.jpg")
r, g, b = image.split()
image.show()
image = Image.merge("RGB", (b, g, r))
image.show()

Khi thực hiện đoạn mã trên, bạn có thể thấy hình ảnh gốc và hình ảnh hợp nhất các dải RGB như hình dưới đây:

Hình ảnh đầu vào

Hình ảnh đầu ra

Hợp nhất hai hình ảnh

Theo cách tương tự, để hợp nhất hai hình ảnh khác nhau, bạn cần -

  • Tạo đối tượng hình ảnh cho các hình ảnh cần thiết bằng cách sử dụng hàm open ().

  • Trong khi hợp nhất hai hình ảnh, bạn cần đảm bảo rằng cả hai hình ảnh có cùng kích thước. Do đó, hãy lấy từng kích thước của cả hai hình ảnh và nếu cần, hãy thay đổi kích thước chúng cho phù hợp.

  • Tạo một hình ảnh trống bằng cách sử dụng hàm Image.new ().

  • Dán các hình ảnh bằng cách sử dụng hàm paste ().

  • Lưu và hiển thị hình ảnh kết quả bằng các hàm save () và show ().

Thí dụ

Ví dụ sau minh họa sự hợp nhất của hai hình ảnh bằng cách sử dụng gối con trăn:

from PIL import Image
#Read the two images
image1 = Image.open('images/elephant.jpg')
image1.show()
image2 = Image.open('images/ladakh.jpg')
image2.show()
#resize, first image
image1 = image1.resize((426, 240))
image1_size = image1.size
image2_size = image2.size
new_image = Image.new('RGB',(2*image1_size[0], image1_size[1]), (250,250,250))
new_image.paste(image1,(0,0))
new_image.paste(image2,(image1_size[0],0))
new_image.save("images/merged_image.jpg","JPEG")
new_image.show()

Đầu ra

Nếu bạn lưu chương trình trên dưới dạng example.py và thực thi, chương trình sẽ hiển thị hai hình ảnh đầu vào và hình ảnh được hợp nhất bằng tiện ích hiển thị PNG tiêu chuẩn, như sau:

Hình ảnh đầu vào1

Hình ảnh đầu vào2

Hình ảnh hợp nhất

Làm mờ hình ảnh có thể được thực hiện bằng cách giảm mức độ nhiễu trong hình ảnh bằng cách áp dụng bộ lọc cho hình ảnh. Làm mờ ảnh là một trong những khía cạnh quan trọng của quá trình xử lý ảnh.

Các ImageFilter classtrong thư viện Pillow cung cấp một số bộ lọc hình ảnh tiêu chuẩn. Bộ lọc hình ảnh có thể được áp dụng cho hình ảnh bằng cách gọifilter() method của đối tượng Image với loại bộ lọc bắt buộc như được định nghĩa trong lớp ImageFilter.

Có nhiều kỹ thuật khác nhau được sử dụng để làm mờ hình ảnh và chúng ta sẽ thảo luận về các kỹ thuật được đề cập dưới đây.

  • Mờ đơn giản

  • Hộp mờ

  • Gaussian mờ

Tất cả ba kỹ thuật này sẽ sử dụng phương thức 'Image.filter ()' để áp dụng bộ lọc cho hình ảnh.

Mờ đơn giản

Nó áp dụng hiệu ứng làm mờ cho hình ảnh như được chỉ định thông qua một nhân cụ thể hoặc ma trận tích chập.

Cú pháp

filter(ImageFilter.BLUR)

Thí dụ

#Import required Image library
from PIL import Image, ImageFilter

#Open existing image
OriImage = Image.open('images/boy.jpg')
OriImage.show()

blurImage = OriImage.filter(ImageFilter.BLUR)
blurImage.show()
#Save blurImage
blurImage.save('images/simBlurImage.jpg')

Khi thực thi, ví dụ trên tạo hai cửa sổ tiện ích hiển thị PNG tiêu chuẩn (trong trường hợp này là cửa sổ Photos ứng dụng).

Original image

Blurred image

Hộp mờ

Trong bộ lọc này, chúng tôi sử dụng 'bán kính' làm tham số. Bán kính tỷ lệ thuận với giá trị mờ.

Cú pháp

ImageFilter.BoxBlur(radius)

Ở đâu,

  • Radius - Kích thước của hộp theo một hướng.

  • Radius 0 - nghĩa là không bị nhòe và trả lại hình ảnh giống nhau.

  • RRadius 1 & minnus; mất 1 pixel ở mỗi hướng, tức là tổng cộng 9 pixel.

Thí dụ

#Import required Image library
from PIL import Image,
 
#Open existing image
OriImage = Image.open('images/boy.jpg')
OriImage.show()

#Applying BoxBlur filter
boxImage = OriImage.filter(ImageFilter.BoxBlur(5))
boxImage.show()

#Save Boxblur image
boxImage.save('images/boxblur.jpg')

Đầu ra

Khi thực thi, ví dụ trên tạo ra hai cửa sổ tiện ích hiển thị PNG tiêu chuẩn (trong trường hợp này là ứng dụng Windows Photos).

Original image

Blurred image

Gaussian Blur

Bộ lọc này cũng sử dụng bán kính tham số và hoạt động tương tự như làm mờ hộp với một số thay đổi thuật toán. Nói tóm lại, việc thay đổi giá trị bán kính, sẽ tạo ra các hình ảnh 'Gaussianblur' có cường độ khác nhau.

Cú pháp

ImageFilter.GaussianBlur(radius=2)

Ở đâu,

  • Bán kính - Bán kính mờ

Thí dụ

#Import required Image library
from PIL import Image, ImageFilter

#Open existing image
OriImage = Image.open('images/boy.jpg')
OriImage.show()

#Applying GaussianBlur filter
gaussImage = OriImage.filter(ImageFilter.GaussianBlur(5))
gaussImage.show()

#Save Gaussian Blur Image
gaussImage.save('images/gaussian_blur.jpg')

Đầu ra

Khi thực thi, ví dụ trên tạo hai cửa sổ tiện ích hiển thị PNG tiêu chuẩn (trong trường hợp này là cửa sổ Photos ứng dụng).

Original image

Blurred image

Cắt ảnh là một trong những thao tác quan trọng của quá trình xử lý ảnh để loại bỏ các phần không mong muốn của ảnh cũng như thêm các tính năng cần thiết cho ảnh. Đây là quy trình được sử dụng rộng rãi trong các ứng dụng web, để tải lên hình ảnh.

Hàm crop () của lớp hình ảnh trong Pillow yêu cầu phần được cắt dưới dạng hình chữ nhật. Phần hình chữ nhật được cắt từ một hình ảnh được chỉ định dưới dạng bộ bốn phần tử và trả về phần hình chữ nhật của hình ảnh đã được cắt dưới dạng Đối tượng hình ảnh.

Thí dụ

Ví dụ sau minh họa cách xoay hình ảnh bằng gối trăn:

#Import required Image library
from PIL import Image

#Create an Image Object from an Image
im = Image.open('images/elephant.jpg')

#Display actual image
im.show()

#left, upper, right, lowe
#Crop
cropped = im.crop((1,2,300,300))

#Display the cropped portion
cropped.show()

#Save the cropped image
cropped.save('images/croppedBeach1.jpg')

Đầu ra

Nếu bạn lưu chương trình trên dưới dạng example.py và thực thi, chương trình sẽ hiển thị các hình ảnh gốc và hình ảnh đã cắt bằng tiện ích hiển thị PNG tiêu chuẩn, như sau:

Ảnh gốc

Hình ảnh đã cắt

Trong khi làm việc trên hình ảnh bằng thư viện xử lý hình ảnh python, có những trường hợp bạn cần lật một hình ảnh hiện có để hiểu thêm về nó, để nâng cao khả năng hiển thị của nó hoặc do yêu cầu của bạn.

Mô-đun hình ảnh của thư viện gối cho phép chúng ta lật một hình ảnh rất dễ dàng. Chúng tôi sẽ sử dụng chức năng chuyển vị (phương thức) từ mô-đun Hình ảnh để lật các hình ảnh. Một số phương thức thường được sử dụng nhất được hỗ trợ bởi 'transpose ()' là -

  • Image.FLIP_LEFT_RIGHT - Để lật hình ảnh theo chiều ngang

  • Image.FLIP_TOP_BOTTOM - Để lật hình ảnh theo chiều dọc

  • Image.ROTATE_90 - Để xoay hình ảnh bằng cách chỉ định mức độ

Ví dụ 1: Hình ảnh được lật ngang

Ví dụ Python sau đây đọc một hình ảnh, lật nó theo chiều ngang và hiển thị hình ảnh gốc và được lật bằng tiện ích hiển thị PNG tiêu chuẩn -

# import required image module
from PIL import Image

# Open an already existing image
imageObject = Image.open("images/spiderman.jpg")

# Do a flip of left and right
hori_flippedImage = imageObject.transpose(Image.FLIP_LEFT_RIGHT)

# Show the original image
imageObject.show()

# Show the horizontal flipped image
hori_flippedImage.show()

Đầu ra

Original image

Flipped image

Ví dụ 2: Hình ảnh được lật dọc

Ví dụ Python sau đây đọc một hình ảnh, lật nó theo chiều dọc và hiển thị hình ảnh gốc và được lật bằng tiện ích hiển thị PNG tiêu chuẩn -

# import required image module
from PIL import Image

# Open an already existing image
imageObject = Image.open("images/spiderman.jpg")

# Do a flip of left and right
hori_flippedImage = imageObject.transpose(Image.FLIP_LEFT_RIGHT)

# Show the original image
imageObject.show()

# Show vertically flipped image
Vert_flippedImage = imageObject.transpose(Image.FLIP_TOP_BOTTOM)
Vert_flippedImage.show()

Đầu ra

Original Image

Flipped Image

Ví dụ 3: Xoay Hình ảnh đến một mức độ cụ thể

Ví dụ Python sau đây đọc một hình ảnh, xoay đến một mức độ được chỉ định và hiển thị hình ảnh gốc và xoay bằng tiện ích hiển thị PNG tiêu chuẩn -

# import required image module
from PIL import Image

# Open an already existing image
imageObject = Image.open("images/spiderman.jpg")

# Do a flip of left and right
hori_flippedImage = imageObject.transpose(Image.FLIP_LEFT_RIGHT)

# Show the original image
imageObject.show()

#show 90 degree flipped image
degree_flippedImage = imageObject.transpose(Image.ROTATE_90)
degree_flippedImage.show()

Đầu ra

Original Image

Rotated Image

Hầu hết hình ảnh kỹ thuật số là một mặt phẳng hai chiều của các pixel và nó có chiều rộng và chiều cao. Mô-đun Hình ảnh từ thư viện gối có kích thước thuộc tính. Bộ này bao gồm chiều rộng và chiều cao của hình ảnh như các phần tử của nó. Để thay đổi kích thước hình ảnh, bạn gọi phương thức resize () của lớp hình ảnh của gối bằng cách đưa ra chiều rộng và chiều cao.

Thay đổi kích thước và lưu hình ảnh đã thay đổi kích thước

Chương trình thay đổi kích thước và lưu hình ảnh đã thay đổi kích thước được đưa ra dưới đây:

#Import required Image library
from PIL import Image

#Create an Image Object from an Image
im = Image.open("images/cat.jpg")

#Display actual image
im.show()

#Make the new image half the width and half the height of the original image
resized_im = im.resize((round(im.size[0]*0.5), round(im.size[1]*0.5)))

#Display the resized imaged
resized_im.show()

#Save the cropped image
resized_im.save('resizedBeach1.jpg')

Đầu ra

Nếu bạn lưu chương trình trên dưới dạng example.py và thực thi, chương trình sẽ hiển thị các hình ảnh gốc và được thay đổi kích thước bằng cách sử dụng tiện ích hiển thị PNG tiêu chuẩn, như sau:

Original Image

Resized Image

Bạn có nhận thấy rằng, một số ảnh trực tuyến được đánh dấu mờ. Hình mờ chắc chắn là một trong những cách tốt hơn để bảo vệ hình ảnh của bạn khỏi bị lạm dụng. Ngoài ra, bạn nên thêm hình mờ vào các bức ảnh sáng tạo của mình, trước khi chia sẻ chúng trên phương tiện truyền thông xã hội để tránh việc nó bị lạm dụng.

Hình mờ nói chung là một số văn bản hoặc biểu trưng phủ trên ảnh để xác định ai đã chụp ảnh hoặc ai sở hữu quyền đối với ảnh.

Gói gối cho phép chúng tôi thêm hình mờ vào hình ảnh của bạn. Để thêm hình mờ vào hình ảnh của chúng tôi, chúng tôi cần“Image”, “ImageDraw”“ImageFont” mô-đun từ gói gối.

Mô-đun 'ImageDraw' thêm chức năng vẽ đồ họa 2D lên hình ảnh mới hoặc hình ảnh hiện có. Mô-đun 'ImageFont' được sử dụng để tải các tệp phông chữ bitmap, TrueType và OpenType.

Thí dụ

Sau đây chương trình python trình bày cách thêm hình mờ vào hình ảnh bằng gối python -

#Import required Image library
from PIL import Image, ImageDraw, ImageFont

#Create an Image Object from an Image
im = Image.open('images/boy.jpg')
width, height = im.size

draw = ImageDraw.Draw(im)
text = "sample watermark"

font = ImageFont.truetype('arial.ttf', 36)
textwidth, textheight = draw.textsize(text, font)

# calculate the x,y coordinates of the text
margin = 10
x = width - textwidth - margin
y = height - textheight - margin

# draw watermark in the bottom right corner
draw.text((x, y), text, font=font)
im.show()

#Save watermarked image
im.save('images/watermark.jpg')

Đầu ra

Giả sử, sau đây là hình ảnh đầu vào boy.jpg nằm trong hình ảnh thư mục.

Sau khi thực hiện chương trình trên, nếu bạn quan sát thư mục đầu ra, bạn có thể thấy tệp watermark.jpg kết quả với hình mờ trên đó như hình dưới đây:

Các ImageFilter modulechứa các định nghĩa cho một tập hợp các bộ lọc được xác định trước mà chúng tôi đã sử dụng với phương thức Image.filter (). Những bộ lọc này được sử dụng để thay đổi giao diện của hình ảnh.

Thí dụ

Ví dụ dưới đây là Lọc hình ảnh -

from PIL import Image, ImageFilter

im = Image.open('jungleSaf2.jpg')

im1 = im.filter(ImageFilter.BLUR)
im1.show()

im2 = im.filter(ImageFilter.MinFilter(3))
im2.show()

im3 = im.filter(ImageFilter.MinFilter) # same as MinFilter(3)
im3.show()

Trong chương trình trên, chúng tôi đã sử dụng MinFilter(), được sử dụng để tạo một bộ lọc tối thiểu. Nó chọn giá trị pixel thấp nhất trong cửa sổ có kích thước đã cho.

ImageFilter.MinFilter(size=3)

Ở đâu,

size - Kích thước hạt nhân, tính bằng pixel.

Đầu ra

Nếu bạn lưu chương trình trên và thực thi, chương trình sẽ hiển thị hình ảnh gốc, hình ảnh bị mờ và hình ảnh bị mờ bằng MinFilter sử dụng tiện ích hiển thị PNG tiêu chuẩn, như sau:

Original Image

Blurred Image

Image blurred with mini filter

Bộ lọc

Phiên bản hiện tại của thư viện gối cung cấp bộ bộ lọc nâng cao hình ảnh được xác định trước được đề cập bên dưới.

  • BLUR

  • CONTOUR

  • DETAIL

  • EDGE_ENHANCE

  • EDGE_ENHANCE_MORE

  • EMBOSS

  • FIND_EDGES

  • SHARPEN

  • SMOOTH

  • SMOOTH_MORE

Thí dụ

Ví dụ python sau áp dụng bộ lọc làm mờ trên một hình ảnh sẽ lưu nó và hiển thị nó bằng tiện ích hiển thị PNG tiêu chuẩn -

#Import required image modules
from PIL import Image, ImageFilter

#Import all the enhancement filter from pillow

from PIL.ImageFilter import (
   BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
   EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)

#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(BLUR)
img1.save('images/ImageFilter_blur.jpg')
img1.show()

Đầu ra

Theo cách tương tự, để image.filter() bạn có thể chuyển bất kỳ tham số nào sau đây để nhận được kết quả đầu ra tương ứng:

  • CONTOUR

  • DETAIL

  • EDGE_ENHANCE

  • EDGE_ENHANCE_MORE

  • EMBOSS

  • FIND_EDGES

  • SMOOTH

  • SMOOTH_MORE

  • SHARPEN

Phương thức Python img.filter (CONTOUR)

Ví dụ về python sau áp dụng bộ lọc CONTOUR cho hình ảnh đã cho.

Thí dụ

#Import required image modules
from PIL import Image, ImageFilter

#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
   BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
   EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(CONTOUR)
img1.save('images/ImageFilter_blur.jpg')
img1.show()

Đầu ra

Nếu bạn lưu chương trình trên và thực thi, nó sẽ hiển thị hình ảnh gốc và hình ảnh được lọc bằng tiện ích hiển thị PNG tiêu chuẩn, như sau:

Original image

Filtered image

Phương thức Python img.filter (DETAIL)

Ví dụ python sau áp dụng bộ lọc DETAIL cho hình ảnh đã cho.

Thí dụ

#Import required image modules
from PIL import Image, ImageFilter

#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
   BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
   EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(DETAIL)
img1.save('images/ImageFilter_blur.jpg')
img1.show()

Đầu ra

Nếu bạn lưu chương trình trên và thực thi, chương trình sẽ hiển thị hình ảnh gốc và hình ảnh được lọc bằng tiện ích hiển thị PNG tiêu chuẩn, như sau:

Original image

Filtered image

Phương thức Python img.filter (EDGE_ENHANCE)

Ví dụ về python sau áp dụng bộ lọc EDGE_ENHANCE cho hình ảnh đã cho -

Thí dụ

#Import required image modules
from PIL import Image, ImageFilter

#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
   BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
   EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(EDGE_ENHANCE)
img1.save('images/ImageFilter_blur.jpg')
img1.show()

Đầu ra

Nếu bạn lưu chương trình trên và thực thi, chương trình sẽ hiển thị hình ảnh gốc và hình ảnh được lọc bằng tiện ích hiển thị PNG tiêu chuẩn, như sau:

Original image

Filtered image

Phương thức Python img.filter (EDGE_ENHANCE_MORE)

Ví dụ về python sau áp dụng bộ lọc EDGE_ENHANCE_MORE cho hình ảnh đã cho.

Thí dụ

#Import required image modules
from PIL import Image, ImageFilter

#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
   BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
   EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(EDGE_ENHANCE_MORE)
img1.save('images/ImageFilter_blur.jpg')
img1.show()

Đầu ra

Nếu bạn lưu chương trình trên và thực thi, chương trình sẽ hiển thị hình ảnh gốc và hình ảnh được lọc bằng tiện ích hiển thị PNG tiêu chuẩn, như sau:

Original image

Filtered image

Phương thức Python img.filter (EMBOSS)

Ví dụ python sau áp dụng bộ lọc EMBOSS cho hình ảnh đã cho.

Thí dụ

#Import required image modules
from PIL import Image, ImageFilter

#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
   BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
   EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(EMBOSS)
img1.save('images/ImageFilter_blur.jpg')
img1.show()

Đầu ra

Nếu bạn lưu chương trình trên và thực thi, nó sẽ hiển thị hình ảnh gốc và hình ảnh được lọc bằng tiện ích hiển thị PNG tiêu chuẩn, như sau:

Original image

Filtered image

Phương thức Python img.filter (FIND_EDGES)

Ví dụ về python sau áp dụng bộ lọc FIND_EDGES cho hình ảnh đã cho.

Thí dụ

#Import required image modules
from PIL import Image, ImageFilter

#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
   BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
   EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(FIND_EDGES)
img1.save('images/ImageFilter_blur.jpg')
img1.show()

Đầu ra

Nếu bạn lưu chương trình trên và thực thi, nó sẽ hiển thị hình ảnh gốc và hình ảnh được lọc bằng tiện ích hiển thị PNG tiêu chuẩn, như sau:

Original image

Filtered image

Phương thức Python img.filter (SMOOTH)

Ví dụ python sau áp dụng bộ lọc SMOOTH cho hình ảnh đã cho.

Thí dụ

#Import required image modules
from PIL import Image, ImageFilter

#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
   BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
   EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(SMOOTH)
img1.save('images/ImageFilter_blur.jpg')
img1.show()

Đầu ra

Nếu bạn lưu chương trình trên và thực thi, nó sẽ hiển thị hình ảnh gốc và hình ảnh được lọc bằng tiện ích hiển thị PNG tiêu chuẩn, như sau:

Original image

Filtered image

Phương thức Python img.filter (SHARPEN)

Ví dụ python sau áp dụng bộ lọc SHARPEN cho hình ảnh đã cho.

Thí dụ

#Import required image modules
from PIL import Image, ImageFilter

#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
   BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
   EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(SHARPEN)
img1.save('images/ImageFilter_blur.jpg')
img1.show()

Đầu ra

Nếu bạn lưu chương trình trên và thực thi, nó sẽ hiển thị hình ảnh gốc và hình ảnh được lọc bằng tiện ích hiển thị PNG tiêu chuẩn, như sau:

Original image

Filtered image

Ví dụ python sau áp dụng bộ lọc SHARPEN cho hình ảnh đã cho.

Thí dụ

#Import required image modules
from PIL import Image, ImageFilter
#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
   BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
   EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(SHARPEN)
img1.save('images/ImageFilter_blur.jpg')
img1.show()

Đầu ra

Nếu bạn lưu chương trình trên và thực thi, nó sẽ hiển thị hình ảnh gốc và hình ảnh được lọc bằng tiện ích hiển thị PNG tiêu chuẩn, như sau:

Original image

Filtered image

Các ImageColor mô-đun chứa các màu ở định dạng khác nhau được sắp xếp trong các bảng và nó cũng chứa các bộ chuyển đổi từ bộ chỉ định màu kiểu CSS3 sang bộ mã RGB.

Tên màu

Mô-đun ImageColor hỗ trợ các định dạng chuỗi sau:

  • Các mã xác định màu hệ thập lục phân, được cho là #rgb hoặc #rrggbb. Ví dụ: # 00ff00 đại diện cho màu xanh lục thuần khiết.

  • Màu # 00ff00, giá trị đỏ là 0 (0% đỏ), giá trị xanh lục là 255 (100% xanh lục) và giá trị xanh lam của RGB của nó là 0 (0% xanh lam).

  • Hình trụ - biểu diễn tọa độ (còn được gọi là HSL) của màu # 00ff00 sắc độ: 0,33, độ bão hòa: 1,00 và giá trị độ đậm nhạt của 00ff00 là 0,50.

  • Mô-đun Màu Hình ảnh cung cấp khoảng 140 tên màu tiêu chuẩn, dựa trên màu được hỗ trợ bởi hệ thống X Window và hầu hết các trình duyệt web. Tên màu không phân biệt chữ hoa chữ thường.

Phương thức ImageColor.getrgb ()

Chuyển đổi một chuỗi màu thành một bộ RGB. Nếu chuỗi không thể được phân tích cú pháp, một ngoại lệ ValueError được đưa ra bởi hàm này.

Cú pháp

PIL.ImageColor.getrgb(color)

Ở đâu,

  • Đối số: color - Một chuỗi màu

  • Giá trị trả lại: (đỏ, xanh lá cây, xanh lam [, alpha])

ví dụ 1

from PIL import ImageColor

# using getrgb
img = ImageColor.getrgb("blue")
print(img)

img1 = ImageColor.getrgb("purple")
print(img1)

Đầu ra

(0, 0, 255)
(128, 0, 128)

Ví dụ 2

#Import required image modules
from PIL import Image,ImageColor

# Create new image & get color RGB tuple.
img = Image.new("RGB", (256, 256), ImageColor.getrgb("#add8e6"))

#Show image
img.show()

Đầu ra

Màu sắc hình ảnh. phương thức getcolor ()

Phương thức này giống như getrgb (), tuy nhiên, chuyển đổi giá trị RGB thành giá trị thang độ xám, nếu chế độ không phải. Các lệnh đồ họa hỗ trợ vẽ hình dạng và màu chú thích văn bản hoặc hình ảnh bảng màu. Nếu không thể phân tích cú pháp chuỗi, hàm này sẽ tạo ra một ngoại lệ ValueError.

Cú pháp

PIL.ImageColor.getcolor(color, mode)

Ở đâu,

  • Đối số - Một chuỗi màu

  • Giá trị trả về - (graylevel [, alpha]) hoặc (đỏ, lục, lam [, alpha])

Thí dụ

#Import required image modules
from PIL import Image,ImageColor

# using getrgb

img = ImageColor.getrgb("skyblue")
print(img)

img1 = ImageColor.getrgb("purple")
print(img1)

Đầu ra

(135, 206, 235)
(128, 0, 128)

Các ‘ImageDraw’mô-đun cung cấp hỗ trợ đồ họa 2D đơn giản cho Đối tượng Hình ảnh. Nói chung, chúng tôi sử dụng mô-đun này để tạo hình ảnh mới, chú thích hoặc chỉnh sửa hình ảnh hiện có và tạo đồ họa nhanh chóng để sử dụng trên web.

Các lệnh đồ họa hỗ trợ vẽ các hình dạng và chú thích văn bản.

  • Hình ảnh có thể được coi là một mảng pixel hai chiều (các yếu tố hình ảnh). Một pixel là điểm màu nhỏ nhất được hỗ trợ.

  • Nguồn gốc của hệ thống tọa độ hai chiều được ImageDraw sử dụng, là upper left corner của hình ảnh.

  • Bảng màu gối chúng tôi sử dụng là RGB. Mô-đun hỗ trợ và biểu diễn màu RGBImageColor.

  • bitmap, OpenType hoặc TrueType là các phông chữ được chấp nhận cho các chú thích văn bản.

  • Hầu hết các lệnh vẽ có thể yêu cầu tham số hộp giới hạn chỉ định vùng trên hình ảnh mà lệnh sẽ được áp dụng.

  • Một dãy tọa độ có thể được biểu diễn dưới dạng [(x0, y0), (x1, y1),… (xn, yn)].

  • Đối với một số lệnh vẽ, chúng tôi yêu cầu giá trị góc.

Thí dụ

Ví dụ về python sau đây vẽ một đường ngang qua hình ảnh đã cho:

#Import required libraries
import sys
from PIL import Image, ImageDraw

#Create Image object
im = Image.open("images/logo.jpg")

#Draw line
draw = ImageDraw.Draw(im)
draw.line((0, 0) + im.size, fill=128)
draw.line((0, im.size[1], im.size[0], 0), fill=128)

#Show image
im.show()

Đầu ra

Nếu bạn lưu chương trình trên dưới dạng example.py và thực thi, chương trình sẽ vẽ một đường ngang qua hình ảnh và hiển thị bằng tiện ích hiển thị PNG tiêu chuẩn, như sau:

Tranh sơn dầu

  • ImageDraw là một bề mặt có thể kéo được Pillow (tức là canvas) của một Hình ảnh.

  • ImageDraw.Draw (img) trả về một biểu diễn canvas có thể vẽ được của tham số Image img. Nền của canvas là hình ảnh "img".

Thí dụ

Ví dụ về python sau đây vẽ văn bản trên hình ảnh đã cho:

#Import required modules from Pillow package
from PIL import Image, ImageDraw, ImageFont

# get an image
base = Image.open('images/boy.jpg').convert('RGBA')

# make a blank image for the text, initialized to transparent text color
txt = Image.new('RGBA', base.size, (255,255,255,0))

# get a font
fnt = ImageFont.truetype('E:/PythonPillow/Fonts/Pacifico.ttf', 40)

# get a drawing context
d = ImageDraw.Draw(txt)

# draw text, half opacity
d.text((14,14), "Tutorials", font=fnt, fill=(255,255,255,128))

# draw text, full opacity
d.text((14,60), "Point", font=fnt, fill=(255,255,255,255))
out = Image.alpha_composite(base, txt)

#Show image
out.show()

Đầu ra

Vẽ Hình dạng bằng mô-đun 'ImageDraw'

Mô-đun ImageDraw cho phép chúng ta tạo ra các hình dạng khác nhau bằng cách đầu tiên tạo một đối tượng vẽ với hình ảnh bạn muốn làm việc và sau đó áp dụng nó. Một số hình dạng phổ biến mà chúng ta có thể vẽ bằng mô-đun 'ImageDraw' như sau:

Hàng

Sau đây là cú pháp để vẽ một đường bằng gối python:

draw.line(xy, fill=None, width=0)

Các line()phương pháp vẽ một đường thẳng từ góc trên bên trái đến góc dưới bên phải của hộp giới hạn xy và canvas. Dòng được tô bằng tô màu. Giá trị mặc định của Không có và 0 tương ứng dành cho các tham số điền và chiều rộng là tùy chọn.

Thí dụ

from PIL import Image, ImageDraw

img = Image.new('RGB', (500, 300), (125, 125, 125))
draw = ImageDraw.Draw(img)
draw.line((200, 100, 300, 200), fill=(0, 0, 0), width=10)

img.show()

Đầu ra

Nhật thực

Sau đây là cú pháp để vẽ một hình elip bằng gối python:

draw.ellipse(xy, fill=None, outline=None)

Các ellipse()phương pháp vẽ hình elip được bao quanh bởi hộp giới hạn xy khi vẽ. Hình dạng được tô bằng cách sử dụng tô màu và chu vi trong đường viền màu. Giá trị mặc định của Không dành cho các tham số điền và chiều rộng là tùy chọn.

Thí dụ

from PIL import Image, ImageDraw

img = Image.new('RGB', (500, 300), (125, 125, 125))
draw = ImageDraw.Draw(img)

draw.ellipse((200, 125, 300, 200), fill=(255, 0, 0), outline=(0, 0, 0))
img.show()

Đầu ra

Hình chữ nhật

Sau đây là cú pháp để vẽ một hình chữ nhật bằng gối python:

draw.rectangle(xy, fill=None, outline=None)

Các rectangle()phương pháp vẽ hình chữ nhật cho trước hộp giới hạn xy trên draw. Hình dạng được tô bằng cách sử dụng tô màu và chu vi trong đường viền màu. Giá trị mặc định của Không dành cho các tham số điền và chiều rộng là tùy chọn.

from PIL import Image, ImageDraw

img = Image.new('RGB', (500, 300), (125, 125, 125))
draw = ImageDraw.Draw(img)

draw.rectangle(
   (200, 125, 300, 200),
   fill=(255, 0, 0),
   outline=(0, 0, 0))
img.show()

Đầu ra

Đa giác

Sau đây là cú pháp để vẽ một hình chữ nhật bằng gối python:

draw.polygon(seq, fill=None, outline=None)

Các polygon()phương pháp vẽ một đa giác nối với các đoạn thẳng các vị trí của dãy tọa độ seq trên bản vẽ. Tọa độ đầu tiên và tọa độ cuối cùng trong seq cũng được nối với nhau bằng một đường thẳng. Hình dạng được tô bằng cách sử dụng tô màu và chu vi trong đường viền màu. Các tham số điền và đường viền là tùy chọn với các giá trị mặc định Không có.

from PIL import Image, ImageDraw

img = Image.new('RGB', (500, 300), (125, 125, 125))
draw = ImageDraw.Draw(img)

draw.polygon(
   ((200, 200), (300, 100), (250, 50)),
   fill=(255, 0, 0),
   outline=(0, 0, 0))
img.show()

Đầu ra

Thư viện hình ảnh Python (PIL) chứa một số hỗ trợ cơ bản cho Chuỗi hình ảnh (định dạng hoạt ảnh). FLI / FLC, GIF và một vài định dạng thử nghiệm là các định dạng chuỗi được hỗ trợ. Các tệp TIFF cũng có thể chứa nhiều hơn một khung.

Mở tệp trình tự, PIL tự động tải khung đầu tiên trong trình tự. Để di chuyển giữa các khung khác nhau, bạn có thể sử dụng phương pháp tìm kiếm và nói.

from PIL import Image
img = Image.open('bird.jpg')
#Skip to the second frame
img.seek(1)
try:
   while 1:
      img.seek(img.tell() + 1)
      #do_something to img
except EOFError:
   #End of sequence
   pass

Đầu ra

raise EOFError
EOFError

Như chúng ta thấy ở trên, bạn sẽ nhận được ngoại lệ EOFError khi chuỗi kết thúc.

Hầu hết các trình điều khiển trong phiên bản thư viện mới nhất chỉ cho phép bạn tìm đến khung tiếp theo (như trong ví dụ trên), để tua lại tệp, bạn có thể phải mở lại.

Một lớp trình lặp trình tự

class ImageSequence:
   def __init__(self, img):
      self.img = img
   def __getitem__(self, ix):
      try:
         if ix:
            self.img.seek(ix)
         return self.img
      except EOFError:
         raise IndexError # end of sequence
for frame in ImageSequence(img):
   # ...do something to frame...

Bạn có thể viết văn bản trên hình ảnh bằng cách chuyển vị trí của văn bản, chính văn bản và màu sắc của văn bản. Chúng ta có thể truyền nhiều tham số khác cho phương thức này.

Thí dụ

from PIL import Image, ImageDraw

img = Image.open(beach1.jpg')
d1 = ImageDraw.Draw(img)
d1.text((28, 36), "Hello, TutorialsPoint!", fill=(255, 0, 0))
img.show()
img.save("images/image_text.jpg")

Đầu vào

Đầu ra

Nếu bạn lưu chương trình trên dưới dạng example.py và thực thi, chương trình sẽ thêm văn bản đã cho vào đó và hiển thị bằng tiện ích hiển thị PNG tiêu chuẩn, như sau:

Chọn phông chữ

Có nhiều cách để chọn phông chữ được sử dụng để viết trên hình ảnh. Chúng tôi có thể tải các phông chữ trực tiếp từ hệ thống bằng cách chuyển đường dẫn đầy đủ đến hàm hoặc chúng tôi có thể sử dụng ImageFont để tải phông chữ TrueType.

Thí dụ

from PIL import Image, ImageDraw, ImageFont

img = Image.open('images/logo.jpg')
d1 = ImageDraw.Draw(img)
myFont = ImageFont.truetype('E:/PythonPillow/Fonts/FreeMono.ttf', 40)
d1.text((0, 0), "Sample text", font=myFont, fill =(255, 0, 0))
img.show()
img.save("images/image_text.jpg")

Đầu ra

Trong chương này, chúng tôi sử dụng numpy để lưu trữ và thao tác dữ liệu hình ảnh bằng thư viện hình ảnh python - “gối”.

Trước khi tiếp tục với chương này, hãy mở dấu nhắc lệnh ở chế độ quản trị viên và thực hiện lệnh sau trong đó để cài đặt numpy:

pip install numpy

Note - Điều này chỉ hoạt động nếu bạn đã cài đặt và cập nhật PIP.

Tạo hình ảnh từ Numpy Array

Tạo hình ảnh RGB bằng PIL và lưu dưới dạng tệp jpg. Trong ví dụ sau, chúng tôi sẽ -

  • Tạo một mảng 150 x 250 pixel.

  • Tô màu cam cho nửa bên trái của mảng.

  • Tô màu xanh lam cho nửa bên phải của mảng.

from PIL import Image
import numpy as np

arr = np.zeros([150, 250, 3], dtype=np.uint8)

arr[:,:100] = [255, 128, 0]

arr[:,100:] = [0, 0, 255]

img = Image.fromarray(arr)

img.show()

img.save("RGB_image.jpg")

Đầu ra

Tạo hình ảnh thang độ xám

Tạo hình ảnh thang độ xám hơi khác so với tạo hình ảnh RGB. Chúng ta có thể sử dụng mảng 2 chiều để tạo hình ảnh thang độ xám.

from PIL import Image
import numpy as np

arr = np.zeros([150,300], dtype=np.uint8)

#Set grey value to black or white depending on x position
   for x in range(300):
      for y in range(150):
         if (x % 16) // 8 == (y % 16)//8:
            arr[y, x] = 0
         else:
            arr[y, x] = 255
img = Image.fromarray(arr)

img.show()

img.save('greyscale.jpg')

Đầu ra

Tạo mảng numpy từ một Hình ảnh

Bạn có thể chuyển đổi ảnh PIL sang mảng numpy và ngược lại. Dưới đây là một chương trình nhỏ để chứng minh điều tương tự.

Thí dụ

#Import required libraries
from PIL import Image
from numpy import array

#Open Image & create image object
img = Image.open('beach1.jpg')

#Show actual image
img.show()

#Convert an image to numpy array
img2arr = array(img)

#Print the array
print(img2arr)

#Convert numpy array back to image
arr2im = Image.fromarray(img2arr)

#Display image
arr2im.show()

#Save the image generated from an array
arr2im.save("array2Image.jpg")

Đầu ra

Nếu bạn lưu chương trình trên dưới dạng example.py và thực thi -

  • Nó hiển thị hình ảnh gốc.

  • Hiển thị mảng được truy xuất từ ​​nó.

  • Chuyển đổi mảng trở lại thành hình ảnh và hiển thị nó.

  • Vì chúng tôi đã sử dụng phương thức show (), các hình ảnh được hiển thị bằng tiện ích hiển thị PNG mặc định, như sau.

[[[ 0 101 120]
[ 3 108 127]
[ 1 107 123]
...
...
[[ 38 59 60]
[ 37 58 59]
[ 36 57 58]
...
[ 74 65 60]
[ 59 48 42]
[ 66 53 47]]
[[ 40 61 62]
[ 38 59 60]
[ 37 58 59]
...
[ 75 66 61]
[ 72 61 55]
[ 61 48 42]]
[[ 40 61 62]
[ 34 55 56]
[ 38 59 60]
...
[ 82 73 68]
[ 72 61 55]
[ 63 52 46]]]

Original Image

Image constructed from the array