Mô-đun ImageDraw
của thư viện xử lý ảnh Python Gối [PIL] cung cấp nhiều phương thức để vẽ hình, chẳng hạn như hình tròn, hình vuông và đường thẳng
- Mô-đun ImageDraw — Gối [PIL Fork] 4. 4. 0. tài liệu dev0
Bài viết này mô tả các nội dung sau
- Quy trình vẽ hình
- phương pháp vẽ
- Thông số chung
- ví dụ phương pháp
- Vẽ trên hình có sẵn
Xem bài viết sau để biết cách cài đặt và sử dụng cơ bản Gối [PIL]
- Cách sử dụng Gối [PIL. Thư viện hình ảnh Python]
Liên kết được tài trợ
Quy trình vẽ hình
Tạo đối tượng vẽ
Chuẩn bị một đối tượng Image
ảnh nền [ảnh để vẽ hình] và sử dụng nó để tạo đối tượng Draw
. Đừng quên nhập Image
và ImageDraw
from PIL import Image, ImageDraw
im = Image.new['RGB', [500, 300], [128, 128, 128]]
draw = ImageDraw.Draw[im]
nguồn.
Ở đây, tạo một hình ảnh vững chắc với
draw.ellipse[[100, 100, 150, 200], fill=[255, 0, 0], outline=[0, 0, 0]]
draw.rectangle[[200, 100, 300, 200], fill=[0, 192, 192], outline=[255, 255, 255]]
draw.line[[350, 200, 450, 100], fill=[255, 255, 0], width=10]
im.save['data/dst/pillow_imagedraw.jpg', quality=95]
0. Chế độ, kích thước và màu tô được chỉ định trong tham sốVẽ hình bằng phương pháp vẽ
Gọi phương thức vẽ từ đối tượng Draw
để vẽ hình
Vẽ hình elip, hình chữ nhật và đường thẳng làm ví dụ. Các thông số sẽ được mô tả sau
draw.ellipse[[100, 100, 150, 200], fill=[255, 0, 0], outline=[0, 0, 0]]
draw.rectangle[[200, 100, 300, 200], fill=[0, 192, 192], outline=[255, 255, 255]]
draw.line[[350, 200, 450, 100], fill=[255, 255, 0], width=10]
im.save['data/dst/pillow_imagedraw.jpg', quality=95]
nguồn.
phương pháp vẽ
Thông số chung
Các tham số sau thường được sử dụng trong nhiều phương pháp
xy
Đặt diện tích hình chữ nhật để vẽ hình
Chỉ định ở một trong các định dạng sau
2draw.ellipse[[100, 100, 150, 200], fill=[255, 0, 0], outline=[0, 0, 0]] draw.rectangle[[200, 100, 300, 200], fill=[0, 192, 192], outline=[255, 255, 255]] draw.line[[350, 200, 450, 100], fill=[255, 255, 0], width=10] im.save['data/dst/pillow_imagedraw.jpg', quality=95]
3draw.ellipse[[100, 100, 150, 200], fill=[255, 0, 0], outline=[0, 0, 0]] draw.rectangle[[200, 100, 300, 200], fill=[0, 192, 192], outline=[255, 255, 255]] draw.line[[350, 200, 450, 100], fill=[255, 255, 0], width=10] im.save['data/dst/pillow_imagedraw.jpg', quality=95]
Trong
draw.ellipse[[100, 100, 150, 200], fill=[255, 0, 0], outline=[0, 0, 0]]
draw.rectangle[[200, 100, 300, 200], fill=[0, 192, 192], outline=[255, 255, 255]]
draw.line[[350, 200, 450, 100], fill=[255, 255, 0], width=10]
im.save['data/dst/pillow_imagedraw.jpg', quality=95]
4, draw.ellipse[[100, 100, 150, 200], fill=[255, 0, 0], outline=[0, 0, 0]]
draw.rectangle[[200, 100, 300, 200], fill=[0, 192, 192], outline=[255, 255, 255]]
draw.line[[350, 200, 450, 100], fill=[255, 255, 0], width=10]
im.save['data/dst/pillow_imagedraw.jpg', quality=95]
5 và draw.ellipse[[100, 100, 150, 200], fill=[255, 0, 0], outline=[0, 0, 0]]
draw.rectangle[[200, 100, 300, 200], fill=[0, 192, 192], outline=[255, 255, 255]]
draw.line[[350, 200, 450, 100], fill=[255, 255, 0], width=10]
im.save['data/dst/pillow_imagedraw.jpg', quality=95]
6, nhiều tọa độ được chỉ định thay vì hai điểm đại diện cho một khu vực hình chữ nhật
7draw.ellipse[[100, 100, 150, 200], fill=[255, 0, 0], outline=[0, 0, 0]] draw.rectangle[[200, 100, 300, 200], fill=[0, 192, 192], outline=[255, 255, 255]] draw.line[[350, 200, 450, 100], fill=[255, 255, 0], width=10] im.save['data/dst/pillow_imagedraw.jpg', quality=95]
8draw.ellipse[[100, 100, 150, 200], fill=[255, 0, 0], outline=[0, 0, 0]] draw.rectangle[[200, 100, 300, 200], fill=[0, 192, 192], outline=[255, 255, 255]] draw.line[[350, 200, 450, 100], fill=[255, 255, 0], width=10] im.save['data/dst/pillow_imagedraw.jpg', quality=95]
draw.ellipse[[100, 100, 150, 200], fill=[255, 0, 0], outline=[0, 0, 0]]
draw.rectangle[[200, 100, 300, 200], fill=[0, 192, 192], outline=[255, 255, 255]]
draw.line[[350, 200, 450, 100], fill=[255, 255, 0], width=10]
im.save['data/dst/pillow_imagedraw.jpg', quality=95]
4 vẽ một đường thẳng nối từng điểm, draw.ellipse[[100, 100, 150, 200], fill=[255, 0, 0], outline=[0, 0, 0]]
draw.rectangle[[200, 100, 300, 200], fill=[0, 192, 192], outline=[255, 255, 255]]
draw.line[[350, 200, 450, 100], fill=[255, 255, 0], width=10]
im.save['data/dst/pillow_imagedraw.jpg', quality=95]
5 vẽ một đa giác trong đó mỗi điểm được kết nối và draw.ellipse[[100, 100, 150, 200], fill=[255, 0, 0], outline=[0, 0, 0]]
draw.rectangle[[200, 100, 300, 200], fill=[0, 192, 192], outline=[255, 255, 255]]
draw.line[[350, 200, 450, 100], fill=[255, 255, 0], width=10]
im.save['data/dst/pillow_imagedraw.jpg', quality=95]
6 vẽ một điểm 1 pixel tại mỗi điểmlấp đầy
Đặt màu để điền vào hình dạng
Định dạng thông số kỹ thuật khác nhau tùy thuộc vào chế độ của hình ảnh [đối tượng ____45_______]
3. Đặt từng giá trị màu [0-255] ở dạngim = Image.new['RGB', [500, 250], [128, 128, 128]] draw = ImageDraw.Draw[im] draw.line[[[30, 200], [130, 100], [80, 50]], fill=[255, 255, 0]] draw.line[[[80, 200], [180, 100], [130, 50]], fill=[255, 255, 0], width=10] draw.polygon[[[200, 200], [300, 100], [250, 50]], fill=[255, 255, 0], outline=[0, 0, 0]] draw.point[[[350, 200], [450, 100], [400, 50]], fill=[255, 255, 0]]
4im = Image.new['RGB', [500, 250], [128, 128, 128]] draw = ImageDraw.Draw[im] draw.line[[[30, 200], [130, 100], [80, 50]], fill=[255, 255, 0]] draw.line[[[80, 200], [180, 100], [130, 50]], fill=[255, 255, 0], width=10] draw.polygon[[[200, 200], [300, 100], [250, 50]], fill=[255, 255, 0], outline=[0, 0, 0]] draw.point[[[350, 200], [450, 100], [400, 50]], fill=[255, 255, 0]]
5 [Thang độ xám]. Đặt giá trị [0-255] làm số nguyênim = Image.new['RGB', [500, 250], [128, 128, 128]] draw = ImageDraw.Draw[im] draw.line[[[30, 200], [130, 100], [80, 50]], fill=[255, 255, 0]] draw.line[[[80, 200], [180, 100], [130, 50]], fill=[255, 255, 0], width=10] draw.polygon[[[200, 200], [300, 100], [250, 50]], fill=[255, 255, 0], outline=[0, 0, 0]] draw.point[[[350, 200], [450, 100], [400, 50]], fill=[255, 255, 0]]
Giá trị mặc định là
im = Image.new['RGB', [500, 250], [128, 128, 128]]
draw = ImageDraw.Draw[im]
draw.line[[[30, 200], [130, 100], [80, 50]], fill=[255, 255, 0]]
draw.line[[[80, 200], [180, 100], [130, 50]], fill=[255, 255, 0], width=10]
draw.polygon[[[200, 200], [300, 100], [250, 50]], fill=[255, 255, 0], outline=[0, 0, 0]]
draw.point[[[350, 200], [450, 100], [400, 50]], fill=[255, 255, 0]]
6 [không điền]đề cương
Đặt màu đường viền cho hình
Định dạng thông số kỹ thuật của màu giống như
im = Image.new['RGB', [500, 250], [128, 128, 128]]
draw = ImageDraw.Draw[im]
draw.line[[[30, 200], [130, 100], [80, 50]], fill=[255, 255, 0]]
draw.line[[[80, 200], [180, 100], [130, 50]], fill=[255, 255, 0], width=10]
draw.polygon[[[200, 200], [300, 100], [250, 50]], fill=[255, 255, 0], outline=[0, 0, 0]]
draw.point[[[350, 200], [450, 100], [400, 50]], fill=[255, 255, 0]]
7 ở trên. Mặc định là im = Image.new['RGB', [500, 250], [128, 128, 128]]
draw = ImageDraw.Draw[im]
draw.line[[[30, 200], [130, 100], [80, 50]], fill=[255, 255, 0]]
draw.line[[[80, 200], [180, 100], [130, 50]], fill=[255, 255, 0], width=10]
draw.polygon[[[200, 200], [300, 100], [250, 50]], fill=[255, 255, 0], outline=[0, 0, 0]]
draw.point[[[350, 200], [450, 100], [400, 50]], fill=[255, 255, 0]]
6 [không viền]Kể từ phiên bản
im = Image.new['RGB', [500, 250], [128, 128, 128]]
draw = ImageDraw.Draw[im]
draw.line[[[30, 200], [130, 100], [80, 50]], fill=[255, 255, 0]]
draw.line[[[80, 200], [180, 100], [130, 50]], fill=[255, 255, 0], width=10]
draw.polygon[[[200, 200], [300, 100], [250, 50]], fill=[255, 255, 0], outline=[0, 0, 0]]
draw.point[[[350, 200], [450, 100], [400, 50]], fill=[255, 255, 0]]
9, không có tùy chọn nào để đặt độ rộng của đường kẻ [độ dày của đường kẻ] ngoài draw.ellipse[[100, 100, 150, 200], fill=[255, 0, 0], outline=[0, 0, 0]]
draw.rectangle[[200, 100, 300, 200], fill=[0, 192, 192], outline=[255, 255, 255]]
draw.line[[350, 200, 450, 100], fill=[255, 255, 0], width=10]
im.save['data/dst/pillow_imagedraw.jpg', quality=95]
4ví dụ phương pháp
Xem tài liệu chính thức để biết chi tiết
Hình elip, hình chữ nhật
- Hình elip [Hình tròn].
1im = Image.new['RGB', [600, 250], [128, 128, 128]] draw = ImageDraw.Draw[im] draw.arc[[25, 50, 175, 200], start=30, end=270, fill=[255, 255, 0]] draw.chord[[225, 50, 375, 200], start=30, end=270, fill=[255, 255, 0], outline=[0, 0, 0]] draw.pieslice[[425, 50, 575, 200], start=30, end=270, fill=[255, 255, 0], outline=[0, 0, 0]]
- Hình chữ nhật [Hình vuông].
2im = Image.new['RGB', [600, 250], [128, 128, 128]] draw = ImageDraw.Draw[im] draw.arc[[25, 50, 175, 200], start=30, end=270, fill=[255, 255, 0]] draw.chord[[225, 50, 375, 200], start=30, end=270, fill=[255, 255, 0], outline=[0, 0, 0]] draw.pieslice[[425, 50, 575, 200], start=30, end=270, fill=[255, 255, 0], outline=[0, 0, 0]]
im = Image.new['RGB', [600, 250], [128, 128, 128]]
draw = ImageDraw.Draw[im]
draw.arc[[25, 50, 175, 200], start=30, end=270, fill=[255, 255, 0]]
draw.chord[[225, 50, 375, 200], start=30, end=270, fill=[255, 255, 0], outline=[0, 0, 0]]
draw.pieslice[[425, 50, 575, 200], start=30, end=270, fill=[255, 255, 0], outline=[0, 0, 0]]
3 vẽ tiếp tuyến hình elip với diện tích hình chữ nhật được chỉ định bởi đối số im = Image.new['RGB', [600, 250], [128, 128, 128]]
draw = ImageDraw.Draw[im]
draw.arc[[25, 50, 175, 200], start=30, end=270, fill=[255, 255, 0]]
draw.chord[[225, 50, 375, 200], start=30, end=270, fill=[255, 255, 0], outline=[0, 0, 0]]
draw.pieslice[[425, 50, 575, 200], start=30, end=270, fill=[255, 255, 0], outline=[0, 0, 0]]
4. Nếu bạn chỉ định một hình vuông, một hình tròn thực sẽ được vẽKết quả xuất ra như trong ví dụ trên
Đường thẳng, đa giác, điểm
- Đường kẻ.
5im = Image.new['RGB', [600, 250], [128, 128, 128]] draw = ImageDraw.Draw[im] draw.arc[[25, 50, 175, 200], start=30, end=270, fill=[255, 255, 0]] draw.chord[[225, 50, 375, 200], start=30, end=270, fill=[255, 255, 0], outline=[0, 0, 0]] draw.pieslice[[425, 50, 575, 200], start=30, end=270, fill=[255, 255, 0], outline=[0, 0, 0]]
4im = Image.new['RGB', [600, 250], [128, 128, 128]] draw = ImageDraw.Draw[im] draw.arc[[25, 50, 175, 200], start=30, end=270, fill=[255, 255, 0]] draw.chord[[225, 50, 375, 200], start=30, end=270, fill=[255, 255, 0], outline=[0, 0, 0]] draw.pieslice[[425, 50, 575, 200], start=30, end=270, fill=[255, 255, 0], outline=[0, 0, 0]]
- Đặt nhiều tọa độ của hai hoặc nhiều điểm là
8draw.ellipse[[100, 100, 150, 200], fill=[255, 0, 0], outline=[0, 0, 0]] draw.rectangle[[200, 100, 300, 200], fill=[0, 192, 192], outline=[255, 255, 255]] draw.line[[350, 200, 450, 100], fill=[255, 255, 0], width=10] im.save['data/dst/pillow_imagedraw.jpg', quality=95]
- Các đường nối mỗi điểm được vẽ
- Đặt nhiều tọa độ của hai hoặc nhiều điểm là
8. Chiều rộng của dòng [độ dày của dòng]im = Image.new['RGB', [600, 250], [128, 128, 128]] draw = ImageDraw.Draw[im] draw.arc[[25, 50, 175, 200], start=30, end=270, fill=[255, 255, 0]] draw.chord[[225, 50, 375, 200], start=30, end=270, fill=[255, 255, 0], outline=[0, 0, 0]] draw.pieslice[[425, 50, 575, 200], start=30, end=270, fill=[255, 255, 0], outline=[0, 0, 0]]
- Lưu ý rằng nếu bạn làm cho chiều rộng của đường dày hơn với
8, chỉ định 3 điểm trở lên vớiim = Image.new['RGB', [600, 250], [128, 128, 128]] draw = ImageDraw.Draw[im] draw.arc[[25, 50, 175, 200], start=30, end=270, fill=[255, 255, 0]] draw.chord[[225, 50, 375, 200], start=30, end=270, fill=[255, 255, 0], outline=[0, 0, 0]] draw.pieslice[[425, 50, 575, 200], start=30, end=270, fill=[255, 255, 0], outline=[0, 0, 0]]
4 sẽ khiến kết nối trông không hấp dẫnim = Image.new['RGB', [600, 250], [128, 128, 128]] draw = ImageDraw.Draw[im] draw.arc[[25, 50, 175, 200], start=30, end=270, fill=[255, 255, 0]] draw.chord[[225, 50, 375, 200], start=30, end=270, fill=[255, 255, 0], outline=[0, 0, 0]] draw.pieslice[[425, 50, 575, 200], start=30, end=270, fill=[255, 255, 0], outline=[0, 0, 0]]
- Lưu ý rằng nếu bạn làm cho chiều rộng của đường dày hơn với
- đa giác.
1im = Image.open['data/src/lena.jpg'] draw = ImageDraw.Draw[im] draw.pieslice[[15, 50, 140, 175], start=30, end=330, fill=[255, 255, 0]]
4im = Image.new['RGB', [600, 250], [128, 128, 128]] draw = ImageDraw.Draw[im] draw.arc[[25, 50, 175, 200], start=30, end=270, fill=[255, 255, 0]] draw.chord[[225, 50, 375, 200], start=30, end=270, fill=[255, 255, 0], outline=[0, 0, 0]] draw.pieslice[[425, 50, 575, 200], start=30, end=270, fill=[255, 255, 0], outline=[0, 0, 0]]
- Đặt nhiều tọa độ của ba điểm trở lên là
8draw.ellipse[[100, 100, 150, 200], fill=[255, 0, 0], outline=[0, 0, 0]] draw.rectangle[[200, 100, 300, 200], fill=[0, 192, 192], outline=[255, 255, 255]] draw.line[[350, 200, 450, 100], fill=[255, 255, 0], width=10] im.save['data/dst/pillow_imagedraw.jpg', quality=95]
- Một đa giác trong đó mỗi điểm được kết nối được vẽ
- Đặt nhiều tọa độ của ba điểm trở lên là
- Điểm.
4im = Image.open['data/src/lena.jpg'] draw = ImageDraw.Draw[im] draw.pieslice[[15, 50, 140, 175], start=30, end=330, fill=[255, 255, 0]]
4im = Image.new['RGB', [600, 250], [128, 128, 128]] draw = ImageDraw.Draw[im] draw.arc[[25, 50, 175, 200], start=30, end=270, fill=[255, 255, 0]] draw.chord[[225, 50, 375, 200], start=30, end=270, fill=[255, 255, 0], outline=[0, 0, 0]] draw.pieslice[[425, 50, 575, 200], start=30, end=270, fill=[255, 255, 0], outline=[0, 0, 0]]
- Đặt nhiều tọa độ của một hoặc nhiều điểm là
8draw.ellipse[[100, 100, 150, 200], fill=[255, 0, 0], outline=[0, 0, 0]] draw.rectangle[[200, 100, 300, 200], fill=[0, 192, 192], outline=[255, 255, 255]] draw.line[[350, 200, 450, 100], fill=[255, 255, 0], width=10] im.save['data/dst/pillow_imagedraw.jpg', quality=95]
- Một điểm pixel được vẽ cho mỗi điểm
- Đặt nhiều tọa độ của một hoặc nhiều điểm là
Ví dụ về đường thẳng [
draw.ellipse[[100, 100, 150, 200], fill=[255, 0, 0], outline=[0, 0, 0]]
draw.rectangle[[200, 100, 300, 200], fill=[0, 192, 192], outline=[255, 255, 255]]
draw.line[[350, 200, 450, 100], fill=[255, 255, 0], width=10]
im.save['data/dst/pillow_imagedraw.jpg', quality=95]
4], đa giác [draw.ellipse[[100, 100, 150, 200], fill=[255, 0, 0], outline=[0, 0, 0]]
draw.rectangle[[200, 100, 300, 200], fill=[0, 192, 192], outline=[255, 255, 255]]
draw.line[[350, 200, 450, 100], fill=[255, 255, 0], width=10]
im.save['data/dst/pillow_imagedraw.jpg', quality=95]
5], điểm [draw.ellipse[[100, 100, 150, 200], fill=[255, 0, 0], outline=[0, 0, 0]]
draw.rectangle[[200, 100, 300, 200], fill=[0, 192, 192], outline=[255, 255, 255]]
draw.line[[350, 200, 450, 100], fill=[255, 255, 0], width=10]
im.save['data/dst/pillow_imagedraw.jpg', quality=95]
6] như sau. Vì điểm là 1 pixel nên khó nhìn nhưng nó được vẽ ở bên phảiim = Image.new['RGB', [500, 250], [128, 128, 128]]
draw = ImageDraw.Draw[im]
draw.line[[[30, 200], [130, 100], [80, 50]], fill=[255, 255, 0]]
draw.line[[[80, 200], [180, 100], [130, 50]], fill=[255, 255, 0], width=10]
draw.polygon[[[200, 200], [300, 100], [250, 50]], fill=[255, 255, 0], outline=[0, 0, 0]]
draw.point[[[350, 200], [450, 100], [400, 50]], fill=[255, 255, 0]]
nguồn.
Arc, hợp âm, bánh
Một cung, một cung [cung] và một hình tròn chạm vào diện tích hình chữ nhật được chỉ định bởi đối số
im = Image.new['RGB', [600, 250], [128, 128, 128]]
draw = ImageDraw.Draw[im]
draw.arc[[25, 50, 175, 200], start=30, end=270, fill=[255, 255, 0]]
draw.chord[[225, 50, 375, 200], start=30, end=270, fill=[255, 255, 0], outline=[0, 0, 0]]
draw.pieslice[[425, 50, 575, 200], start=30, end=270, fill=[255, 255, 0], outline=[0, 0, 0]]
4 được vẽ- vòng cung.
ImageDraw
1ImageDraw
2,ImageDraw
3- Đặt góc của cung theo độ
- 0 độ là hướng 3 giờ. theo chiều kim đồng hồ
- Hợp âm [cung].
ImageDraw
4- Điểm đầu và điểm cuối của cung được nối với nhau bằng một đoạn thẳng
- Bánh.
ImageDraw
5- Điểm đầu và điểm cuối của cung được nối với nhau bằng một đường thẳng đến tâm của đường tròn
Ví dụ về cung [ImageDraw
6], hợp âm [ImageDraw
7], cung tròn [ImageDraw
8] như sau
im = Image.new['RGB', [600, 250], [128, 128, 128]]
draw = ImageDraw.Draw[im]
draw.arc[[25, 50, 175, 200], start=30, end=270, fill=[255, 255, 0]]
draw.chord[[225, 50, 375, 200], start=30, end=270, fill=[255, 255, 0], outline=[0, 0, 0]]
draw.pieslice[[425, 50, 575, 200], start=30, end=270, fill=[255, 255, 0], outline=[0, 0, 0]]
nguồn.
Liên kết được tài trợ
Vẽ trên hình có sẵn
Trong các ví dụ trước, các số liệu được vẽ trên hình ảnh rắn được tạo bởi
draw.ellipse[[100, 100, 150, 200], fill=[255, 0, 0], outline=[0, 0, 0]]
draw.rectangle[[200, 100, 300, 200], fill=[0, 192, 192], outline=[255, 255, 255]]
draw.line[[350, 200, 450, 100], fill=[255, 255, 0], width=10]
im.save['data/dst/pillow_imagedraw.jpg', quality=95]
0. Nếu một tệp hình ảnh hiện có được đọc bởi Image
0, nó có thể được vẽ trên đó