Tùy chỉnh các hình dạng trong bản trình chiếu bằng Python
Giới thiệu
Hãy xem một hình vuông. Trong PowerPoint, sử dụng Edit Points, bạn có thể:
- di chuyển góc của hình vuông vào trong hoặc ra ngoài,
- điều chỉnh độ cong của một góc hoặc điểm,
- thêm các điểm mới vào hình vuông,
- thao tác với các điểm của nó.
Bạn có thể áp dụng các thao tác này cho bất kỳ hình dạng nào. Với Edit Points, bạn có thể sửa đổi một hình dạng hoặc tạo một hình mới từ một hình dạng hiện có.
Mẹo chỉnh sửa hình dạng

Trước khi bắt đầu chỉnh sửa các hình dạng PowerPoint bằng Edit Points, hãy lưu ý các điểm sau về hình dạng:
- Một hình dạng (hoặc đường path của nó) có thể đóng hoặc mở.
- Một hình dạng đóng không có điểm bắt đầu hay kết thúc; một hình dạng mở có điểm đầu và điểm cuối.
- Mỗi hình dạng có ít nhất hai điểm neo được nối với nhau bằng các đoạn thẳng.
- Một đoạn có thể thẳng hoặc cong; các điểm neo xác định tính chất của đoạn.
- Các điểm neo có thể là corner, smooth, hoặc straight:
- Điểm corner là nơi hai đoạn thẳng gặp nhau tạo góc.
- Điểm smooth có hai tay cầm nằm trên cùng một đường thẳng, và các đoạn liền kề tạo một đường cong mượt. Trong trường hợp này, cả hai tay cầm có cùng khoảng cách tới điểm neo.
- Điểm straight cũng có hai tay cầm thẳng hàng, và các đoạn liền kề tạo một đường cong mượt. Tuy nhiên, các tay cầm không nhất thiết phải có cùng khoảng cách tới điểm neo.
- Bằng cách di chuyển hoặc chỉnh sửa các điểm neo (do đó thay đổi góc của các đoạn), bạn có thể thay đổi hình dáng của hình.
Để chỉnh sửa các hình dạng PowerPoint, Aspose.Slides cung cấp lớp GeometryPath.
- Một đối tượng GeometryPath đại diện cho đường geometry của một đối tượng GeometryShape.
- Để lấy GeometryPath từ một thể hiện của GeometryShape, hãy sử dụng phương thức GeometryShape.get_geometry_paths.
- Để đặt GeometryPath cho một hình dạng, sử dụng GeometryShape.set_geometry_path cho solid shapes và GeometryShape.set_geometry_paths cho composite shapes.
- Để thêm các đoạn, sử dụng các phương thức trên lớp GeometryPath.
- Sử dụng các thuộc tính GeometryPath.stroke và GeometryPath.fill_mode để điều khiển cách hiển thị của đường geometry.
- Sử dụng thuộc tính GeometryPath.path_data để lấy đường geometry của một hình dạng dưới dạng mảng các đoạn path.
Các thao tác chỉnh sửa đơn giản
Các phương thức sau được sử dụng cho các thao tác chỉnh sửa đơn giản.
Thêm một đường thẳng vào cuối một path:
line_to(point)
line_to(x, y)
Thêm một đường thẳng tại vị trí chỉ định trong một path:
line_to(point, index)
line_to(x, y, index)
Thêm một đường cong Bezier bậc ba vào cuối một path:
cubic_bezier_to(point1, point2, point3)
cubic_bezier_to(x1, y1, x2, y2, x3, y3)
Thêm một đường cong Bezier bậc ba tại vị trí chỉ định trong một path:
cubic_bezier_to(point1, point2, point3, index)
cubic_bezier_to(x1, y1, x2, y2, x3, y3, index)
Thêm một đường cong Bezier bậc hai vào cuối một path:
quadratic_bezier_to(point1, point2)
quadratic_bezier_to(x1, y1, x2, y2)
Thêm một đường cong Bezier bậc hai tại vị trí chỉ định trong một path:
quadratic_bezier_to(point1, point2, index)
quadratic_bezier_to(x1, y1, x2, y2, index)
Gắn một cung vào một path:
arc_to(width, heigth, startAngle, sweepAngle)
Đóng hình hiện tại trong một path:
close_figure()
Đặt vị trí cho điểm tiếp theo:
move_to(point)
move_to(x, y)
Xóa đoạn path tại một chỉ mục cho trước:
remove_at(index)
Thêm các điểm tùy chỉnh vào hình dạng
Ở đây bạn sẽ học cách định nghĩa một hình dạng tự do bằng cách thêm chuỗi các điểm của riêng bạn. Bằng cách chỉ định các điểm có thứ tự và loại đoạn (thẳng hoặc cong) và tùy chọn đóng path, bạn có thể vẽ các đồ họa tùy chỉnh chính xác—đa giác, biểu tượng, chú thích, hoặc logo—trực tiếp trên slide của mình.
- Tạo một thể hiện của lớp GeometryShape và đặt kiểu của nó thành ShapeType.RECTANGLE.
- Lấy một thể hiện GeometryPath từ hình dạng.
- Chèn một điểm mới giữa hai điểm trên cùng của path.
- Chèn một điểm mới giữa hai điểm dưới cùng của path.
- Áp dụng path đã cập nhật cho hình dạng.
Mã Python sau minh họa cách thêm các điểm tùy chỉnh vào một hình dạng:
import aspose.slides as slides
with slides.Presentation() as presentation:
slide = presentation.slides[0]
shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 100, 100, 200, 100)
geometry_path = shape.get_geometry_paths()[0]
geometry_path.line_to(100, 50, 1)
geometry_path.line_to(100, 50, 4)
shape.set_geometry_path(geometry_path)
presentation.save("custom_points.pptx", slides.export.SaveFormat.PPTX)

Xóa các điểm khỏi hình dạng
Đôi khi một hình dạng tùy chỉnh chứa các điểm không cần thiết gây phức tạp cho geometry hoặc ảnh hưởng đến cách hiển thị. Phần này hướng dẫn cách xóa các điểm cụ thể khỏi path của một hình dạng để bạn có thể đơn giản hoá đường viền và đạt được kết quả sạch sẽ, chính xác hơn.
- Tạo một thể hiện của lớp GeometryShape và đặt kiểu của nó thành ShapeType.HEART.
- Lấy một thể hiện GeometryPath từ hình dạng.
- Xóa một đoạn khỏi path.
- Áp dụng path đã cập nhật cho hình dạng.
Mã Python sau minh họa cách xóa các điểm khỏi một hình dạng:
import aspose.slides as slides
with slides.Presentation() as presentation:
slide = presentation.slides[0]
shape = slide.shapes.add_auto_shape(slides.ShapeType.HEART, 100, 100, 300, 300)
path = shape.get_geometry_paths()[0]
path.remove_at(2)
shape.set_geometry_path(path)
presentation.save("removed_points.pptx", slides.export.SaveFormat.PPTX)

Tạo hình dạng tùy chỉnh
Tạo các hình vector độc đáo bằng cách định nghĩa một GeometryPath và cấu thành nó từ các đường thẳng, cung và đường cong Bézier. Phần này chỉ ra cách xây dựng một geometry tùy chỉnh từ đầu và thêm hình dạng kết quả vào slide của bạn.
- Tính toán các điểm cho hình dạng.
- Tạo một thể hiện của lớp GeometryPath.
- Điền các điểm vào path.
- Tạo một thể hiện của lớp GeometryShape.
- Áp dụng path cho hình dạng.
Mã Python sau minh họa cách tạo một hình dạng tùy chỉnh:
import aspose.slides as slides
import aspose.pydrawing as draw
import math
points = []
R = 100
r = 50
step = 72
for angle in range(-90, 270, step):
radians = angle * (math.pi / 180)
x = R * math.cos(radians)
y = R * math.sin(radians)
points.append(draw.PointF(x + R, y + R))
radians = math.pi * (angle + step / 2) / 180.0
x = r * math.cos(radians)
y = r * math.sin(radians)
points.append(draw.PointF(x + R, y + R))
star_path = slides.GeometryPath()
star_path.move_to(points[0])
for i in range(len(points)):
star_path.line_to(points[i])
star_path.close_figure()
with slides.Presentation() as presentation:
slide = presentation.slides[0]
shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 100, 100, R * 2, R * 2)
shape.set_geometry_path(star_path)
presentation.save("custom_shape.pptx", slides.export.SaveFormat.PPTX)

Tạo các hình dạng tùy chỉnh ghép hợp
Tạo một hình dạng tùy chỉnh ghép hợp cho phép bạn kết hợp nhiều đường geometry thành một hình dạng duy nhất, có thể tái sử dụng trên slide. Định nghĩa và hợp nhất các path này để xây dựng các hình ảnh phức tạp vượt qua bộ hình dạng tiêu chuẩn.
- Tạo một thể hiện của lớp GeometryShape.
- Tạo thể hiện đầu tiên của lớp GeometryPath.
- Tạo thể hiện thứ hai của lớp GeometryPath.
- Áp dụng cả hai path cho hình dạng.
Mã Python sau minh họa cách tạo một hình dạng tùy chỉnh ghép hợp:
import aspose.slides as slides
with slides.Presentation() as presentation:
slide = presentation.slides[0]
shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 100, 100, 200, 100)
geometry_path_0 = slides.GeometryPath()
geometry_path_0.move_to(0, 0)
geometry_path_0.line_to(shape.width, 0)
geometry_path_0.line_to(shape.width, shape.height/3)
geometry_path_0.line_to(0, shape.height / 3)
geometry_path_0.close_figure()
geometry_path_1 = slides.GeometryPath()
geometry_path_1.move_to(0, shape.height/3 * 2)
geometry_path_1.line_to(shape.width, shape.height / 3 * 2)
geometry_path_1.line_to(shape.width, shape.height)
geometry_path_1.line_to(0, shape.height)
geometry_path_1.close_figure()
shape.set_geometry_paths([ geometry_path_0, geometry_path_1])
presentation.save("composite_shape.pptx", slides.export.SaveFormat.PPTX)

Tạo các hình dạng tùy chỉnh với các góc cong
Phần này chỉ ra cách vẽ một hình dạng tùy chỉnh với các góc cong mượt mà bằng một geometry path. Bạn sẽ kết hợp các đoạn thẳng và các cung tròn để tạo ra đường viền và thêm hình dạng hoàn chỉnh vào slide.
Mã Python sau minh họa cách tạo một hình dạng tùy chỉnh với các góc cong:
import aspose.slides as slides
import aspose.pydrawing as draw
shape_x = 20
shape_y = 20
shape_width = 300
shape_height = 200
left_top_size = 50
right_top_size = 20
right_bottom_size = 40
left_bottom_size = 10
with slides.Presentation() as presentation:
slide = presentation.slides[0]
shape = slide.shapes.add_auto_shape(
slides.ShapeType.CUSTOM, shape_x, shape_y, shape_width, shape_height)
point1 = draw.PointF(left_top_size, 0)
point2 = draw.PointF(shape_width - right_top_size, 0)
point3 = draw.PointF(shape_width, shape_height - right_bottom_size)
point4 = draw.PointF(left_bottom_size, shape_height)
point5 = draw.PointF(0, left_top_size)
geometry_path = slides.GeometryPath()
geometry_path.move_to(point1)
geometry_path.line_to(point2)
geometry_path.arc_to(right_top_size, right_top_size, 180, -90)
geometry_path.line_to(point3)
geometry_path.arc_to(right_bottom_size, right_bottom_size, -90, -90)
geometry_path.line_to(point4)
geometry_path.arc_to(left_bottom_size, left_bottom_size, 0, -90)
geometry_path.line_to(point5)
geometry_path.arc_to(left_top_size, left_top_size, 90, -90)
geometry_path.close_figure()
shape.set_geometry_path(geometry_path)
presentation.save("curved_corners.pptx", slides.export.SaveFormat.PPTX)

Xác định liệu geometry của một hình dạng có bị đóng hay không
Một hình dạng đóng được định nghĩa là hình mà tất cả các cạnh của nó kết nối với nhau, tạo thành một ranh giới duy nhất không có khoảng trống. Hình dạng như vậy có thể là một hình học đơn giản hoặc một đường viền tùy chỉnh phức tạp. Đoạn mã dưới đây cho thấy cách kiểm tra xem geometry của một hình dạng có bị đóng hay không:
def is_geometry_closed(geometry_shape):
is_closed = None
for geometry_path in geometry_shape.get_geometry_paths():
data_length = len(geometry_path.path_data)
if data_length == 0:
continue
last_segment = geometry_path.path_data[data_length - 1]
is_closed = last_segment.path_command == PathCommandType.CLOSE
if not is_closed:
return False
return is_closed
FAQ
Điều gì sẽ xảy ra với màu nền và viền sau khi thay thế geometry?
Kiểu dáng vẫn giữ với hình dạng; chỉ có đường viền thay đổi. Màu nền và viền sẽ tự động được áp dụng cho geometry mới.
Làm thế nào để xoay một hình dạng tùy chỉnh cùng với geometry của nó một cách đúng?
Sử dụng thuộc tính rotation của hình dạng; geometry sẽ quay cùng với hình dạng vì nó được gắn vào hệ tọa độ của chính hình dạng.
Tôi có thể chuyển đổi một hình dạng tùy chỉnh thành hình ảnh để “khóa” kết quả không?
Có. Xuất khu vực slide cần thiết hoặc chính shape sang định dạng raster; việc này sẽ đơn giản hoá công việc tiếp theo với các geometry phức tạp.