Hướng dẫn python pillow color filter - bộ lọc màu gối python

Sử dụng lớp hình ảnh#

Lớp quan trọng nhất trong thư viện hình ảnh Python là lớp

import os, sys
from PIL import Image

size = (128, 128)

for infile in sys.argv[1:]:
    outfile = os.path.splitext(infile)[0] + ".thumbnail"
    if infile != outfile:
        try:
            with Image.open(infile) as im:
                im.thumbnail(size)
                im.save(outfile, "JPEG")
        except OSError:
            print("cannot create thumbnail for", infile)
0, được xác định trong mô -đun có cùng tên. Bạn có thể tạo các trường hợp của lớp này theo nhiều cách; Bằng cách tải hình ảnh từ các tệp, xử lý các hình ảnh khác hoặc tạo hình ảnh từ đầu.

Để tải hình ảnh từ tệp, hãy sử dụng chức năng

import os, sys
from PIL import Image

size = (128, 128)

for infile in sys.argv[1:]:
    outfile = os.path.splitext(infile)[0] + ".thumbnail"
    if infile != outfile:
        try:
            with Image.open(infile) as im:
                im.thumbnail(size)
                im.save(outfile, "JPEG")
        except OSError:
            print("cannot create thumbnail for", infile)
1 trong mô -đun
import os, sys
from PIL import Image

size = (128, 128)

for infile in sys.argv[1:]:
    outfile = os.path.splitext(infile)[0] + ".thumbnail"
    if infile != outfile:
        try:
            with Image.open(infile) as im:
                im.thumbnail(size)
                im.save(outfile, "JPEG")
        except OSError:
            print("cannot create thumbnail for", infile)
0:

>>> from PIL import Image
>>> im = Image.open("hopper.ppm")

Nếu thành công, chức năng này trả về một đối tượng

import os, sys
from PIL import Image

size = (128, 128)

for infile in sys.argv[1:]:
    outfile = os.path.splitext(infile)[0] + ".thumbnail"
    if infile != outfile:
        try:
            with Image.open(infile) as im:
                im.thumbnail(size)
                im.save(outfile, "JPEG")
        except OSError:
            print("cannot create thumbnail for", infile)
0. Bây giờ bạn có thể sử dụng các thuộc tính thể hiện để kiểm tra nội dung tệp:

>>> print(im.format, im.size, im.mode)
PPM (512, 512) RGB

Thuộc tính

import os, sys
from PIL import Image

size = (128, 128)

for infile in sys.argv[1:]:
    outfile = os.path.splitext(infile)[0] + ".thumbnail"
    if infile != outfile:
        try:
            with Image.open(infile) as im:
                im.thumbnail(size)
                im.save(outfile, "JPEG")
        except OSError:
            print("cannot create thumbnail for", infile)
4 xác định nguồn của một hình ảnh. Nếu hình ảnh không được đọc từ một tệp, nó sẽ được đặt thành không. Thuộc tính kích thước là 2-tuple chứa chiều rộng và chiều cao (tính bằng pixel). Thuộc tính
import os, sys
from PIL import Image

size = (128, 128)

for infile in sys.argv[1:]:
    outfile = os.path.splitext(infile)[0] + ".thumbnail"
    if infile != outfile:
        try:
            with Image.open(infile) as im:
                im.thumbnail(size)
                im.save(outfile, "JPEG")
        except OSError:
            print("cannot create thumbnail for", infile)
5 xác định số và tên của các dải trong hình ảnh, và cả loại pixel và độ sâu. Các chế độ phổ biến là Lôi (Luminance) cho hình ảnh màu xám, RGB RGB cho hình ảnh màu thật và hình ảnh CMYK cho các hình ảnh trước.

Nếu tệp không thể được mở, ngoại lệ

import os, sys
from PIL import Image

size = (128, 128)

for infile in sys.argv[1:]:
    outfile = os.path.splitext(infile)[0] + ".thumbnail"
    if infile != outfile:
        try:
            with Image.open(infile) as im:
                im.thumbnail(size)
                im.save(outfile, "JPEG")
        except OSError:
            print("cannot create thumbnail for", infile)
6 sẽ được nâng lên.

Khi bạn có một thể hiện của lớp

import os, sys
from PIL import Image

size = (128, 128)

for infile in sys.argv[1:]:
    outfile = os.path.splitext(infile)[0] + ".thumbnail"
    if infile != outfile:
        try:
            with Image.open(infile) as im:
                im.thumbnail(size)
                im.save(outfile, "JPEG")
        except OSError:
            print("cannot create thumbnail for", infile)
0, bạn có thể sử dụng các phương thức được xác định bởi lớp này để xử lý và thao tác với hình ảnh. Ví dụ: hãy để hiển thị hình ảnh mà chúng tôi vừa tải:

Ghi chú

Phiên bản tiêu chuẩn của

import os, sys
from PIL import Image

size = (128, 128)

for infile in sys.argv[1:]:
    outfile = os.path.splitext(infile)[0] + ".thumbnail"
    if infile != outfile:
        try:
            with Image.open(infile) as im:
                im.thumbnail(size)
                im.save(outfile, "JPEG")
        except OSError:
            print("cannot create thumbnail for", infile)
8 không hiệu quả lắm, vì nó lưu hình ảnh vào một tệp tạm thời và gọi một tiện ích để hiển thị hình ảnh. Nếu bạn không có một tiện ích thích hợp được cài đặt, nó sẽ giành được công việc. Khi nó hoạt động mặc dù, nó rất tiện dụng để gỡ lỗi và kiểm tra.

Các phần sau đây cung cấp một cái nhìn tổng quan về các chức năng khác nhau được cung cấp trong thư viện này.

Đọc và viết hình ảnh#

Thư viện hình ảnh Python hỗ trợ nhiều định dạng tệp hình ảnh. Để đọc các tệp từ đĩa, hãy sử dụng hàm

import os, sys
from PIL import Image

size = (128, 128)

for infile in sys.argv[1:]:
    outfile = os.path.splitext(infile)[0] + ".thumbnail"
    if infile != outfile:
        try:
            with Image.open(infile) as im:
                im.thumbnail(size)
                im.save(outfile, "JPEG")
        except OSError:
            print("cannot create thumbnail for", infile)
1 trong mô -đun
import os, sys
from PIL import Image

size = (128, 128)

for infile in sys.argv[1:]:
    outfile = os.path.splitext(infile)[0] + ".thumbnail"
    if infile != outfile:
        try:
            with Image.open(infile) as im:
                im.thumbnail(size)
                im.save(outfile, "JPEG")
        except OSError:
            print("cannot create thumbnail for", infile)
0. Bạn không phải biết định dạng tệp để mở tệp. Thư viện tự động xác định định dạng dựa trên nội dung của tệp.

Để lưu một tệp, hãy sử dụng phương thức

import sys
from PIL import Image

for infile in sys.argv[1:]:
    try:
        with Image.open(infile) as im:
            print(infile, im.format, f"{im.size}x{im.mode}")
    except OSError:
        pass
1 của lớp
import os, sys
from PIL import Image

size = (128, 128)

for infile in sys.argv[1:]:
    outfile = os.path.splitext(infile)[0] + ".thumbnail"
    if infile != outfile:
        try:
            with Image.open(infile) as im:
                im.thumbnail(size)
                im.save(outfile, "JPEG")
        except OSError:
            print("cannot create thumbnail for", infile)
0. Khi lưu tệp, tên trở nên quan trọng. Trừ khi bạn chỉ định định dạng, thư viện sử dụng tiện ích mở rộng tên tệp để khám phá định dạng lưu trữ tệp nào để sử dụng.

Chuyển đổi tệp thành jpeg#

import os, sys
from PIL import Image

for infile in sys.argv[1:]:
    f, e = os.path.splitext(infile)
    outfile = f + ".jpg"
    if infile != outfile:
        try:
            with Image.open(infile) as im:
                im.save(outfile)
        except OSError:
            print("cannot convert", infile)

Một đối số thứ hai có thể được cung cấp cho phương thức

import sys
from PIL import Image

for infile in sys.argv[1:]:
    try:
        with Image.open(infile) as im:
            print(infile, im.format, f"{im.size}x{im.mode}")
    except OSError:
        pass
1 chỉ định rõ ràng định dạng tệp. Nếu bạn sử dụng tiện ích mở rộng không chuẩn, bạn phải luôn chỉ định định dạng theo cách này:

Tạo hình thu nhỏ jpeg#

import os, sys
from PIL import Image

size = (128, 128)

for infile in sys.argv[1:]:
    outfile = os.path.splitext(infile)[0] + ".thumbnail"
    if infile != outfile:
        try:
            with Image.open(infile) as im:
                im.thumbnail(size)
                im.save(outfile, "JPEG")
        except OSError:
            print("cannot create thumbnail for", infile)

Điều quan trọng cần lưu ý là thư viện không giải mã hoặc tải dữ liệu raster trừ khi nó thực sự phải có. Khi bạn mở một tệp, tiêu đề tệp được đọc để xác định định dạng tệp và trích xuất những thứ như chế độ, kích thước và các thuộc tính khác cần thiết để giải mã tệp, nhưng phần còn lại của tệp không được xử lý cho đến sau này.

Điều này có nghĩa là mở một tệp hình ảnh là một hoạt động nhanh, độc lập với kích thước tệp và loại nén. Dưới đây, một tập lệnh đơn giản để nhanh chóng xác định một tập hợp các tệp hình ảnh:

Xác định tệp hình ảnh#

import sys
from PIL import Image

for infile in sys.argv[1:]:
    try:
        with Image.open(infile) as im:
            print(infile, im.format, f"{im.size}x{im.mode}")
    except OSError:
        pass

Cắt, dán và hợp nhất hình ảnh#

Lớp

import os, sys
from PIL import Image

size = (128, 128)

for infile in sys.argv[1:]:
    outfile = os.path.splitext(infile)[0] + ".thumbnail"
    if infile != outfile:
        try:
            with Image.open(infile) as im:
                im.thumbnail(size)
                im.save(outfile, "JPEG")
        except OSError:
            print("cannot create thumbnail for", infile)
0 chứa các phương thức cho phép bạn thao tác các vùng trong một hình ảnh. Để trích xuất một vòng lặp phụ từ một hình ảnh, hãy sử dụng phương pháp
import sys
from PIL import Image

for infile in sys.argv[1:]:
    try:
        with Image.open(infile) as im:
            print(infile, im.format, f"{im.size}x{im.mode}")
    except OSError:
        pass
5.

Sao chép một mẫu con từ một hình ảnh#

box = (100, 100, 400, 400)
region = im.crop(box)

Vùng được xác định bởi một 4-tuple, trong đó tọa độ (trái, trên, phải, thấp hơn). Thư viện hình ảnh Python sử dụng hệ tọa độ với (0, 0) ở góc trên bên trái. Cũng lưu ý rằng các tọa độ đề cập đến các vị trí giữa các pixel, vì vậy vùng trong ví dụ trên là chính xác 300x300 pixel.

Khu vực bây giờ có thể được xử lý theo một cách nhất định và dán lại.

Xử lý một mẫu phụ và dán lại#

region = region.transpose(Image.Transpose.ROTATE_180)
im.paste(region, box)

Khi dán các vùng trở lại, kích thước của khu vực phải khớp chính xác với vùng đã cho. Ngoài ra, khu vực không thể mở rộng bên ngoài hình ảnh. Tuy nhiên, các chế độ của hình ảnh gốc và khu vực không cần phải khớp. Nếu họ don, khu vực này được tự động chuyển đổi trước khi được dán (xem phần trên các biến đổi màu bên dưới để biết chi tiết).Color transforms below for details).

Ở đây, một ví dụ bổ sung:

Lăn một hình ảnh#

def roll(im, delta):
    """Roll an image sideways."""
    xsize, ysize = im.size

    delta = delta % xsize
    if delta == 0:
        return im

    part1 = im.crop((0, 0, delta, ysize))
    part2 = im.crop((delta, 0, xsize, ysize))
    im.paste(part1, (xsize - delta, 0, xsize, ysize))
    im.paste(part2, (0, 0, xsize - delta, ysize))

    return im

Hoặc nếu bạn muốn hợp nhất hai hình ảnh thành một hình ảnh rộng hơn:

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

def merge(im1, im2):
    w = im1.size[0] + im2.size[0]
    h = max(im1.size[1], im2.size[1])
    im = Image.new("RGBA", (w, h))

    im.paste(im1)
    im.paste(im2, (im1.size[0], 0))

    return im

Đối với các thủ thuật nâng cao hơn, phương pháp dán cũng có thể lấy mặt nạ minh bạch như một đối số tùy chọn. Trong mặt nạ này, giá trị 255 chỉ ra rằng hình ảnh được dán mờ đục ở vị trí đó (nghĩa là hình ảnh được dán nên được sử dụng như là). Giá trị 0 có nghĩa là hình ảnh được dán hoàn toàn trong suốt. Các giá trị ở giữa chỉ ra mức độ minh bạch khác nhau. Ví dụ, dán hình ảnh RGBA và cũng sử dụng nó làm mặt nạ sẽ dán phần mờ đục của hình ảnh nhưng không phải là nền trong suốt của nó.

Thư viện hình ảnh Python cũng cho phép bạn làm việc với các dải riêng lẻ của hình ảnh nhiều băng tần, chẳng hạn như hình ảnh RGB. Phương thức chia tách tạo ra một tập hợp các hình ảnh mới, mỗi hình chứa một dải từ hình ảnh đa băng tần gốc. Hàm Merge có chế độ và một bộ ảnh của hình ảnh, và kết hợp chúng thành một hình ảnh mới. Mẫu sau đây hoán đổi ba dải của hình ảnh RGB:

Tách và hợp nhất các ban nhạc#

r, g, b = im.split()
im = Image.merge("RGB", (b, g, r))

Lưu ý rằng đối với hình ảnh một dải,

import sys
from PIL import Image

for infile in sys.argv[1:]:
    try:
        with Image.open(infile) as im:
            print(infile, im.format, f"{im.size}x{im.mode}")
    except OSError:
        pass
6 tự trả về hình ảnh. Để làm việc với các dải màu riêng lẻ, bạn có thể muốn chuyển đổi hình ảnh thành trước RGB.

Biến đổi hình học#

Lớp

import sys
from PIL import Image

for infile in sys.argv[1:]:
    try:
        with Image.open(infile) as im:
            print(infile, im.format, f"{im.size}x{im.mode}")
    except OSError:
        pass
7 chứa các phương thức đến
import sys
from PIL import Image

for infile in sys.argv[1:]:
    try:
        with Image.open(infile) as im:
            print(infile, im.format, f"{im.size}x{im.mode}")
    except OSError:
        pass
8 và
import sys
from PIL import Image

for infile in sys.argv[1:]:
    try:
        with Image.open(infile) as im:
            print(infile, im.format, f"{im.size}x{im.mode}")
    except OSError:
        pass
9 một hình ảnh. Cái trước lấy một tuple cho kích thước mới, cái sau góc theo độ ngược chiều kim đồng hồ.

Biến đổi hình học đơn giản#

>>> print(im.format, im.size, im.mode)
PPM (512, 512) RGB
0

Để xoay hình ảnh theo các bước 90 độ, bạn có thể sử dụng phương pháp

import sys
from PIL import Image

for infile in sys.argv[1:]:
    try:
        with Image.open(infile) as im:
            print(infile, im.format, f"{im.size}x{im.mode}")
    except OSError:
        pass
9 hoặc phương pháp
box = (100, 100, 400, 400)
region = im.crop(box)
1. Cái sau cũng có thể được sử dụng để lật một hình ảnh xung quanh trục ngang hoặc dọc của nó.

Chuyển một hình ảnh#

>>> print(im.format, im.size, im.mode)
PPM (512, 512) RGB
1

Các hoạt động

box = (100, 100, 400, 400)
region = im.crop(box)
2 cũng có thể được thực hiện giống hệt với các hoạt động
import sys
from PIL import Image

for infile in sys.argv[1:]:
    try:
        with Image.open(infile) as im:
            print(infile, im.format, f"{im.size}x{im.mode}")
    except OSError:
        pass
9, với điều kiện cờ
box = (100, 100, 400, 400)
region = im.crop(box)
4 là đúng, để cung cấp cho các thay đổi tương tự đối với kích thước hình ảnh.

Một dạng biến đổi hình ảnh chung hơn có thể được thực hiện thông qua phương pháp

box = (100, 100, 400, 400)
region = im.crop(box)
5.

Biến đổi màu#

Thư viện hình ảnh Python cho phép bạn chuyển đổi hình ảnh giữa các biểu diễn pixel khác nhau bằng phương pháp

box = (100, 100, 400, 400)
region = im.crop(box)
6.

Chuyển đổi giữa các chế độ#

>>> print(im.format, im.size, im.mode)
PPM (512, 512) RGB
2

Thư viện hỗ trợ các phép biến đổi giữa từng chế độ được hỗ trợ và các chế độ L L L và và RG RGB. Để chuyển đổi giữa các chế độ khác, bạn có thể phải sử dụng hình ảnh trung gian (thường là hình ảnh RG RGB).

Nâng cao hình ảnh#

Thư viện hình ảnh Python cung cấp một số phương pháp và mô -đun có thể được sử dụng để tăng cường hình ảnh.

Filters#

Mô-đun

box = (100, 100, 400, 400)
region = im.crop(box)
7 chứa một số bộ lọc tăng cường được xác định trước có thể được sử dụng với phương pháp
box = (100, 100, 400, 400)
region = im.crop(box)
8.

Áp dụng bộ lọc#

>>> print(im.format, im.size, im.mode)
PPM (512, 512) RGB
3

Hoạt động điểm#

Phương pháp

box = (100, 100, 400, 400)
region = im.crop(box)
9 có thể được sử dụng để dịch các giá trị pixel của hình ảnh (ví dụ: thao tác tương phản hình ảnh). Trong hầu hết các trường hợp, một đối tượng hàm mong đợi một đối số có thể được chuyển cho phương thức này. Mỗi pixel được xử lý theo hàm đó:

Áp dụng các biến đổi điểm#

>>> print(im.format, im.size, im.mode)
PPM (512, 512) RGB
4

Sử dụng kỹ thuật trên, bạn có thể nhanh chóng áp dụng bất kỳ biểu thức đơn giản nào cho một hình ảnh. Bạn cũng có thể kết hợp các phương thức

box = (100, 100, 400, 400)
region = im.crop(box)
9 và
region = region.transpose(Image.Transpose.ROTATE_180)
im.paste(region, box)
1 để sửa đổi có chọn lọc một hình ảnh:

Xử lý các dải riêng lẻ#

>>> print(im.format, im.size, im.mode)
PPM (512, 512) RGB
5

Lưu ý cú pháp được sử dụng để tạo mặt nạ:

>>> print(im.format, im.size, im.mode)
PPM (512, 512) RGB
6

Python chỉ đánh giá phần của biểu thức logic khi cần thiết để xác định kết quả và trả về giá trị cuối cùng được kiểm tra là kết quả của biểu thức. Vì vậy, nếu biểu thức ở trên là sai (0), Python không nhìn vào toán hạng thứ hai và do đó trả về 0. Nếu không, nó sẽ trả về 255.

Enhancement#

Để nâng cao hình ảnh nâng cao hơn, bạn có thể sử dụng các lớp trong mô -đun

region = region.transpose(Image.Transpose.ROTATE_180)
im.paste(region, box)
2. Sau khi được tạo từ một hình ảnh, một đối tượng nâng cao có thể được sử dụng để nhanh chóng thử các cài đặt khác nhau.

Bạn có thể điều chỉnh độ tương phản, độ sáng, cân bằng màu và độ sắc nét theo cách này.

Nâng cao hình ảnh#

>>> print(im.format, im.size, im.mode)
PPM (512, 512) RGB
7

Trình tự hình ảnh#

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

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

Đọc trình tự#

>>> print(im.format, im.size, im.mode)
PPM (512, 512) RGB
8

Như đã thấy trong ví dụ này, bạn sẽ nhận được một ngoại lệ

region = region.transpose(Image.Transpose.ROTATE_180)
im.paste(region, box)
3 khi chuỗi kết thúc.

Lớp sau cho phép bạn sử dụng để đưa ra để lặp qua chuỗi:

Sử dụng lớp lặp ImageSequence#

>>> print(im.format, im.size, im.mode)
PPM (512, 512) RGB
9

In postcript#

Thư viện hình ảnh Python bao gồm các chức năng để in hình ảnh, văn bản và đồ họa trên máy in PostScript. Đây là một ví dụ đơn giản:

Vẽ PostScript#

import os, sys
from PIL import Image

for infile in sys.argv[1:]:
    f, e = os.path.splitext(infile)
    outfile = f + ".jpg"
    if infile != outfile:
        try:
            with Image.open(infile) as im:
                im.save(outfile)
        except OSError:
            print("cannot convert", infile)
0

Thêm về đọc hình ảnh#

Như được mô tả trước đó, hàm

import os, sys
from PIL import Image

size = (128, 128)

for infile in sys.argv[1:]:
    outfile = os.path.splitext(infile)[0] + ".thumbnail"
    if infile != outfile:
        try:
            with Image.open(infile) as im:
                im.thumbnail(size)
                im.save(outfile, "JPEG")
        except OSError:
            print("cannot create thumbnail for", infile)
1 của mô -đun
import os, sys
from PIL import Image

size = (128, 128)

for infile in sys.argv[1:]:
    outfile = os.path.splitext(infile)[0] + ".thumbnail"
    if infile != outfile:
        try:
            with Image.open(infile) as im:
                im.thumbnail(size)
                im.save(outfile, "JPEG")
        except OSError:
            print("cannot create thumbnail for", infile)
0 được sử dụng để mở tệp hình ảnh. Trong hầu hết các trường hợp, bạn chỉ cần chuyển nó tên tệp như một đối số.
region = region.transpose(Image.Transpose.ROTATE_180)
im.paste(region, box)
6 có thể được sử dụng làm trình quản lý ngữ cảnh:

import os, sys
from PIL import Image

for infile in sys.argv[1:]:
    f, e = os.path.splitext(infile)
    outfile = f + ".jpg"
    if infile != outfile:
        try:
            with Image.open(infile) as im:
                im.save(outfile)
        except OSError:
            print("cannot convert", infile)
1

Nếu mọi thứ suôn sẻ, kết quả là một đối tượng

import sys
from PIL import Image

for infile in sys.argv[1:]:
    try:
        with Image.open(infile) as im:
            print(infile, im.format, f"{im.size}x{im.mode}")
    except OSError:
        pass
7. Nếu không, một ngoại lệ
import os, sys
from PIL import Image

size = (128, 128)

for infile in sys.argv[1:]:
    outfile = os.path.splitext(infile)[0] + ".thumbnail"
    if infile != outfile:
        try:
            with Image.open(infile) as im:
                im.thumbnail(size)
                im.save(outfile, "JPEG")
        except OSError:
            print("cannot create thumbnail for", infile)
6 được nâng lên.

Bạn có thể sử dụng một đối tượng giống như tệp thay vì tên tệp. Đối tượng phải thực hiện các phương thức

region = region.transpose(Image.Transpose.ROTATE_180)
im.paste(region, box)
9,
def roll(im, delta):
    """Roll an image sideways."""
    xsize, ysize = im.size

    delta = delta % xsize
    if delta == 0:
        return im

    part1 = im.crop((0, 0, delta, ysize))
    part2 = im.crop((delta, 0, xsize, ysize))
    im.paste(part1, (xsize - delta, 0, xsize, ysize))
    im.paste(part2, (0, 0, xsize - delta, ysize))

    return im
0 và
def roll(im, delta):
    """Roll an image sideways."""
    xsize, ysize = im.size

    delta = delta % xsize
    if delta == 0:
        return im

    part1 = im.crop((0, 0, delta, ysize))
    part2 = im.crop((delta, 0, xsize, ysize))
    im.paste(part1, (xsize - delta, 0, xsize, ysize))
    im.paste(part2, (0, 0, xsize - delta, ysize))

    return im
1 và được mở ở chế độ nhị phân.

Đọc từ một tệp mở#

import os, sys
from PIL import Image

for infile in sys.argv[1:]:
    f, e = os.path.splitext(infile)
    outfile = f + ".jpg"
    if infile != outfile:
        try:
            with Image.open(infile) as im:
                im.save(outfile)
        except OSError:
            print("cannot convert", infile)
2

Để đọc hình ảnh từ dữ liệu nhị phân, hãy sử dụng lớp

def roll(im, delta):
    """Roll an image sideways."""
    xsize, ysize = im.size

    delta = delta % xsize
    if delta == 0:
        return im

    part1 = im.crop((0, 0, delta, ysize))
    part2 = im.crop((delta, 0, xsize, ysize))
    im.paste(part1, (xsize - delta, 0, xsize, ysize))
    im.paste(part2, (0, 0, xsize - delta, ysize))

    return im
2:

Đọc từ dữ liệu nhị phân#

import os, sys
from PIL import Image

for infile in sys.argv[1:]:
    f, e = os.path.splitext(infile)
    outfile = f + ".jpg"
    if infile != outfile:
        try:
            with Image.open(infile) as im:
                im.save(outfile)
        except OSError:
            print("cannot convert", infile)
3

Lưu ý rằng thư viện tua lại tệp (sử dụng

def roll(im, delta):
    """Roll an image sideways."""
    xsize, ysize = im.size

    delta = delta % xsize
    if delta == 0:
        return im

    part1 = im.crop((0, 0, delta, ysize))
    part2 = im.crop((delta, 0, xsize, ysize))
    im.paste(part1, (xsize - delta, 0, xsize, ysize))
    im.paste(part2, (0, 0, xsize - delta, ysize))

    return im
3) trước khi đọc tiêu đề hình ảnh. Ngoài ra, Seek cũng sẽ được sử dụng khi dữ liệu hình ảnh được đọc (bằng phương thức tải). Nếu tệp hình ảnh được nhúng trong một tệp lớn hơn, chẳng hạn như tệp TAR, bạn có thể sử dụng các mô -đun
def roll(im, delta):
    """Roll an image sideways."""
    xsize, ysize = im.size

    delta = delta % xsize
    if delta == 0:
        return im

    part1 = im.crop((0, 0, delta, ysize))
    part2 = im.crop((delta, 0, xsize, ysize))
    im.paste(part1, (xsize - delta, 0, xsize, ysize))
    im.paste(part2, (0, 0, xsize - delta, ysize))

    return im
4 hoặc
def roll(im, delta):
    """Roll an image sideways."""
    xsize, ysize = im.size

    delta = delta % xsize
    if delta == 0:
        return im

    part1 = im.crop((0, 0, delta, ysize))
    part2 = im.crop((delta, 0, xsize, ysize))
    im.paste(part1, (xsize - delta, 0, xsize, ysize))
    im.paste(part2, (0, 0, xsize - delta, ysize))

    return im
5 để truy cập nó.

Đọc từ URL#

import os, sys
from PIL import Image

for infile in sys.argv[1:]:
    f, e = os.path.splitext(infile)
    outfile = f + ".jpg"
    if infile != outfile:
        try:
            with Image.open(infile) as im:
                im.save(outfile)
        except OSError:
            print("cannot convert", infile)
4

Đọc từ một kho lưu trữ tar#

import os, sys
from PIL import Image

for infile in sys.argv[1:]:
    f, e = os.path.splitext(infile)
    outfile = f + ".jpg"
    if infile != outfile:
        try:
            with Image.open(infile) as im:
                im.save(outfile)
        except OSError:
            print("cannot convert", infile)
5

Xử lý hàng loạt#

Hoạt động có thể được áp dụng cho nhiều tệp hình ảnh. Ví dụ, tất cả các hình ảnh PNG trong thư mục hiện tại có thể được lưu dưới dạng JPEG với chất lượng giảm.

import os, sys
from PIL import Image

for infile in sys.argv[1:]:
    f, e = os.path.splitext(infile)
    outfile = f + ".jpg"
    if infile != outfile:
        try:
            with Image.open(infile) as im:
                im.save(outfile)
        except OSError:
            print("cannot convert", infile)
6

Vì hình ảnh cũng có thể được mở từ

def roll(im, delta):
    """Roll an image sideways."""
    xsize, ysize = im.size

    delta = delta % xsize
    if delta == 0:
        return im

    part1 = im.crop((0, 0, delta, ysize))
    part2 = im.crop((delta, 0, xsize, ysize))
    im.paste(part1, (xsize - delta, 0, xsize, ysize))
    im.paste(part2, (0, 0, xsize - delta, ysize))

    return im
6 từ mô -đun
def roll(im, delta):
    """Roll an image sideways."""
    xsize, ysize = im.size

    delta = delta % xsize
    if delta == 0:
        return im

    part1 = im.crop((0, 0, delta, ysize))
    part2 = im.crop((delta, 0, xsize, ysize))
    im.paste(part1, (xsize - delta, 0, xsize, ysize))
    im.paste(part2, (0, 0, xsize - delta, ysize))

    return im
7, ví dụ này có thể được sửa đổi để sử dụng
def roll(im, delta):
    """Roll an image sideways."""
    xsize, ysize = im.size

    delta = delta % xsize
    if delta == 0:
        return im

    part1 = im.crop((0, 0, delta, ysize))
    part2 = im.crop((delta, 0, xsize, ysize))
    im.paste(part1, (xsize - delta, 0, xsize, ysize))
    im.paste(part2, (0, 0, xsize - delta, ysize))

    return im
7 thay vì mô -đun
def roll(im, delta):
    """Roll an image sideways."""
    xsize, ysize = im.size

    delta = delta % xsize
    if delta == 0:
        return im

    part1 = im.crop((0, 0, delta, ysize))
    part2 = im.crop((delta, 0, xsize, ysize))
    im.paste(part1, (xsize - delta, 0, xsize, ysize))
    im.paste(part2, (0, 0, xsize - delta, ysize))

    return im
9.

import os, sys
from PIL import Image

for infile in sys.argv[1:]:
    f, e = os.path.splitext(infile)
    outfile = f + ".jpg"
    if infile != outfile:
        try:
            with Image.open(infile) as im:
                im.save(outfile)
        except OSError:
            print("cannot convert", infile)
7

Điều khiển bộ giải mã#

Một số bộ giải mã cho phép bạn thao tác hình ảnh trong khi đọc nó từ một tệp. Điều này thường có thể được sử dụng để tăng tốc độ giải mã khi tạo hình thu nhỏ (khi tốc độ thường quan trọng hơn chất lượng) và in ra máy in laser đơn sắc (khi chỉ cần phiên bản màu xám của hình ảnh).

Phương pháp

def merge(im1, im2):
    w = im1.size[0] + im2.size[0]
    h = max(im1.size[1], im2.size[1])
    im = Image.new("RGBA", (w, h))

    im.paste(im1)
    im.paste(im2, (im1.size[0], 0))

    return im
0 thao tác với một hình ảnh đã mở nhưng chưa được tải nên nó càng chặt chẽ nhất có thể phù hợp với chế độ và kích thước đã cho. Điều này được thực hiện bằng cách cấu hình lại bộ giải mã hình ảnh.

Đọc ở chế độ dự thảo#

Điều này chỉ có sẵn cho các tệp JPEG và MPO.

import os, sys
from PIL import Image

for infile in sys.argv[1:]:
    f, e = os.path.splitext(infile)
    outfile = f + ".jpg"
    if infile != outfile:
        try:
            with Image.open(infile) as im:
                im.save(outfile)
        except OSError:
            print("cannot convert", infile)
8

Điều này in một cái gì đó như:

import os, sys
from PIL import Image

for infile in sys.argv[1:]:
    f, e = os.path.splitext(infile)
    outfile = f + ".jpg"
    if infile != outfile:
        try:
            with Image.open(infile) as im:
                im.save(outfile)
        except OSError:
            print("cannot convert", infile)
9

Lưu ý rằng hình ảnh kết quả có thể không khớp chính xác với chế độ và kích thước được yêu cầu. Để đảm bảo rằng hình ảnh không lớn hơn kích thước đã cho, hãy sử dụng phương pháp hình thu nhỏ thay thế.