Rgb sang jpg trăn
Lớp quan trọng nhất trong Thư viện hình ảnh Python là lớp, được định nghĩa trong mô-đun có cùng tên. Bạn có thể tạo các thể hiện của lớp này theo nhiều cách; Show
Để tải hình ảnh từ một tệp, hãy sử dụng chức năng trong mô-đun >>> from PIL import Image >>> im = Image.open("hopper.ppm") Nếu thành công, hàm này trả về một đối tượng. 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 xác định nguồn của hình ảnh. Nếu hình ảnh không được đọc từ một tệp, nó được đặt thành Không có. 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 xác định số lượng và tên của các dải trong ảnh, cũng như loại pixel và độ sâu. Các chế độ phổ biến là “L” (độ sáng) cho hình ảnh thang độ xám, “RGB” cho hình ảnh màu trung thực và “CMYK” cho hình ảnh in sẵn Nếu tệp không thể mở được, một ngoại lệ sẽ được đưa ra Khi bạn có một thể hiện của lớp, bạn có thể sử dụng các phương thức được định nghĩa 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 chúng ta vừa tải >>> im.show() Ghi chú Phiên bản tiêu chuẩn 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ài đặt một tiện ích phù hợp, nó thậm chí sẽ không hoạt động. Tuy nhiên, khi nó hoạt động, nó rất thuận tiện để gỡ lỗi và kiểm tra Các phần sau đây cung cấp 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 ảnhThư viện hình ảnh Python hỗ trợ nhiều định dạng tệp hình ảnh. Để đọc tệp từ đĩa, hãy sử dụng chức năng trong mô-đun. Bạn không cần 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 tệp, hãy sử dụng phương thức của lớp. 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ẽ sử dụng phần mở rộng tên tệp để khám phá định dạng lưu trữ tệp nào sẽ sử dụng Chuyển đổi tập tin sang JPEGimport 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) Đối số thứ hai có thể được cung cấp cho phương thức 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ỏ JPEGimport 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ự cần thiết. Khi bạn mở 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ở tệp hình ảnh là một thao tác nhanh, không phụ thuộc vào kích thước tệp và kiểu nén. Đây là 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 ảnhimport 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 ảnhLớp 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 hình chữ nhật con từ một hình ảnh, hãy sử dụng phương pháp Sao chép một hình chữ nhật con từ một hình ảnhbox = (100, 100, 400, 400) region = im.crop(box) Vùng được xác định bởi 4-tuple, trong đó tọa độ là (trái, trên, phải, dưới). 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 tọa độ đề cập đến vị trí giữa các pixel, vì vậy vùng trong ví dụ trên chính xác là 300x300 pixel Vùng hiện có thể được xử lý theo một cách nhất định và dán lại Xử lý một hình chữ nhật con và dán lạiregion = region.transpose(Image.Transpose.ROTATE_180) im.paste(region, box) Khi dán lại các vùng, kích thước của vùng 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 ra bên ngoài hình ảnh. Tuy nhiên, các chế độ của ảnh gốc và vùng không cần phải khớp. Nếu không, khu vực sẽ tự động được chuyển đổi trước khi được dán (xem phần bên dưới để biết chi tiết) Đây là một ví dụ bổ sung Cuộn một hình ảnh________số 8 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 ảnhdef 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 thức dán cũng có thể lấy mặt nạ trong suốt làm đối số tùy chọn. Trong mặt nạ này, giá trị 255 cho biết rằng hình ảnh đã dán bị mờ ở vị trí đó (nghĩa là hình ảnh đã dán nên được sử dụng nguyên trạng). Giá trị 0 có nghĩa là hình ảnh đã dán hoàn toàn trong suốt. Các giá trị ở giữa cho biết các mức độ minh bạch khác nhau. Ví dụ: dán một hình ảnh RGBA và cũng sử dụng nó làm mặt nạ sẽ dán phần mờ của hình ảnh chứ không phải 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 dải, chẳng hạn như hình ảnh RGB. Phương pháp phân tách tạo ra một tập hợp các hình ảnh mới, mỗi hình ảnh chứa một dải từ hình ảnh nhiều dải ban đầu. Hàm hợp nhất lấy một chế độ và một bộ ảnh rồi kết hợp chúng thành một ảnh mới. Mẫu sau hoán đổi ba dải của hình ảnh RGB Tách và hợp nhất các dải>>> print(im.format, im.size, im.mode) PPM (512, 512) RGB0 Lưu ý rằng đối với hình ảnh một dải, trả về chính hình ảnh đó. Để làm việc với các dải màu riêng lẻ, trước tiên bạn có thể muốn chuyển đổi hình ảnh thành “RGB” phép biến đổi hình họcLớp chứa các phương thức và một hình ảnh. Cái trước lấy một tuple cho kích thước mới, cái sau lấy 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) RGB1 Để xoay hình ảnh theo các bước 90 độ, bạn có thể sử dụng phương pháp hoặc phương pháp. Cái sau cũng có thể được sử dụng để lật hình ảnh quanh trục ngang hoặc dọc của nó Chuyển đổi một hình ảnh>>> print(im.format, im.size, im.mode) PPM (512, 512) RGB2 Các thao tá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: pass3 cũng có thể được thực hiện giống hệt với các thao tác, miễn là 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: pass5 là đúng, để cung cấp các thay đổi tương tự đối với kích thước của hình ảnh Một hình thức biến đổi hình ảnh tổng quát hơn có thể được thực hiện thông qua phương pháp biến đổi màu sắcThư 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 thức Chuyển đổi giữa các chế độ>>> print(im.format, im.size, im.mode) PPM (512, 512) RGB3 Thư viện hỗ trợ chuyển đổi giữa từng chế độ được hỗ trợ và chế độ “L” và “RGB”. Để chuyển đổi giữa các chế độ khác, bạn có thể phải sử dụng một hình ảnh trung gian (thường là hình ảnh “RGB”) Nâng cao hình ảnhThư viện hình ảnh Python cung cấp một số phương thức và mô-đun có thể được sử dụng để nâng cao hình ảnh bộ lọcMô-đun chứa một số bộ lọc nâng cao được xác định trước có thể được sử dụng với phương thức Áp dụng bộ lọc>>> print(im.format, im.size, im.mode) PPM (512, 512) RGB4 Hoạt động điểmPhương pháp này có thể được sử dụng để dịch các giá trị pixel của một hình ảnh (e. g. 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 truyền cho phương thức này. Mỗi pixel được xử lý theo chức năng đó Áp dụng biến đổi điểm>>> print(im.format, im.size, im.mode) PPM (512, 512) RGB5 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 hình ảnh. Bạn cũng có thể kết hợp các phương thức và để 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) RGB6 Lưu ý cú pháp được sử dụng để tạo mặt nạ >>> print(im.format, im.size, im.mode) PPM (512, 512) RGB7 Python chỉ đánh giá một 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ó trả về 255 Sự nâng caoĐể cải thiện hình ảnh nâng cao hơn, bạn có thể sử dụng các lớp trong mô-đun. 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 sắc và độ sắc nét theo cách này Tăng cường hình ảnh>>> print(im.format, im.size, im.mode) PPM (512, 512) RGB8 Chuỗi hình ảnhThư viện hình ảnh Python chứa một số hỗ trợ cơ bản cho chuỗi hình ảnh (còn được gọi là định dạng hoạt ả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 TIFF cũng có thể chứa nhiều hơn một khung hình Khi bạn mở tệp trình tự, PIL sẽ tự động tải khung hình đầu tiên trong trình tự. Bạn có thể sử dụng các phương thức tìm kiếm và cho biết để di chuyển giữa các khung hình khác nhau Trình tự đọc>>> print(im.format, im.size, im.mode) PPM (512, 512) RGB9 Như đã thấy trong ví dụ này, bạn sẽ nhận được một ngoại lệ khi chuỗi kết thúc Lớp sau cho phép bạn sử dụng câu lệnh for để lặp qua chuỗi Sử dụng lớp ImageSequence Iterator>>> im.show()0 in PostScriptThư 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>>> im.show()1 Thêm về đọc hình ảnhNhư đã mô tả trước đó, chức năng của mô-đun đượ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 tên tệp làm đối số. box = (100, 100, 400, 400) region = im.crop(box)7 có thể được sử dụng làm trình quản lý ngữ cảnh >>> im.show()2 Nếu mọi thứ suôn sẻ, kết quả là một đối tượng. Nếu không, một ngoại lệ được nêu ra 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 triển khai các phương thức region = region.transpose(Image.Transpose.ROTATE_180) im.paste(region, box)0, region = region.transpose(Image.Transpose.ROTATE_180) im.paste(region, box)1 và region = region.transpose(Image.Transpose.ROTATE_180) im.paste(region, box)2 và được mở ở chế độ nhị phân Đọc từ một tệp đang mở>>> im.show()3 Để đọc một hình ảnh từ dữ liệu nhị phân, hãy sử dụng lớp Đọc từ dữ liệu nhị phân>>> im.show()4 Lưu ý rằng thư viện sẽ tua lại tệp (sử dụng region = region.transpose(Image.Transpose.ROTATE_180) im.paste(region, box)4) 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 (theo phương thức load). 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 hoặc để truy cập tệp đó Đọc từ URL>>> im.show()5 Đọc từ kho lưu trữ tar>>> im.show()6 Xử lý hàng loạtCó thể áp dụng các thao tác cho nhiều tệp hình ảnh. Ví dụ: tất 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 >>> im.show()7 Vì hình ảnh cũng có thể được mở từ region = region.transpose(Image.Transpose.ROTATE_180) im.paste(region, box)7 từ mô-đun region = region.transpose(Image.Transpose.ROTATE_180) im.paste(region, box)8, ví dụ này có thể được sửa đổi để sử dụng region = region.transpose(Image.Transpose.ROTATE_180) im.paste(region, box)8 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 im0 >>> im.show()8 Điều khiển bộ giải mãMột số bộ giải mã cho phép bạn thao tác với 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 bằng máy in laser đơn sắc (khi chỉ cần một phiên bản thang độ xám của hình ảnh) Phương pháp thao tác với một hình ảnh đã mở nhưng chưa được tải để nó khớp với chế độ và kích thước đã cho nhất có thể. Đ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ế độ nhápĐiều này chỉ khả dụng cho các tệp JPEG và MPO >>> im.show()9 Điều này in một cái gì đó giống 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)0 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, thay vào đó hãy sử dụng phương pháp hình thu nhỏ |