Thêm Khung Hình Ảnh vào Bản Trình Chiếu với Python

Giới thiệu

Khung hình ảnh trong Aspose.Slides for Python cho phép bạn đặt và quản lý các hình ảnh raster và vector như các hình dạng slide gốc. Bạn có thể chèn hình ảnh từ tệp hoặc luồng, định vị và thay đổi kích thước chúng bằng các tọa độ chính xác, áp dụng xoay, đặt độ trong suốt và kiểm soát thứ tự z cùng với các hình dạng khác. API cũng hỗ trợ cắt, duy trì tỷ lệ khung hình, thiết lập viền và hiệu ứng, cũng như thay thế hình ảnh nền mà không cần xây dựng lại bố cục. Vì khung hình ảnh hoạt động giống như các hình dạng thông thường, bạn có thể thêm hoạt ảnh, siêu liên kết và văn bản thay thế, giúp việc tạo các bản trình bày giàu hình ảnh và có khả năng truy cập trở nên đơn giản.

Tạo Khung Hình Ảnh

Phần này trình bày cách chèn một hình ảnh vào slide bằng cách tạo một PictureFrame với Aspose.Slides for Python. Bạn sẽ học cách tải hình ảnh, đặt nó chính xác trên slide và kiểm soát kích thước cùng định dạng.

  1. Tạo một thể hiện của lớp Presentation.
  2. Lấy một slide theo chỉ số của nó.
  3. Tạo một PPImage bằng cách thêm hình ảnh vào ImageCollection của bản trình chiếu. Hình ảnh này sẽ được dùng để làm nền cho hình dạng.
  4. Xác định chiều rộng và chiều cao của khung.
  5. Tạo một PictureFrame có kích thước này bằng phương thức add_picture_frame.
  6. Lưu bản trình chiếu dưới dạng tệp PPTX.

Mã Python sau cho thấy cách tạo một khung hình ảnh:

import aspose.slides as slides

# Khởi tạo lớp Presentation để đại diện cho tệp PPTX.
with slides.Presentation() as presentation:
    # Lấy slide đầu tiên.
    slide = presentation.slides[0]

    # Thêm hình ảnh vào bản trình chiếu.
    with open("image.jpeg", "rb") as image_stream:
        image = presentation.images.add_image(image_stream)

        # Thêm một khung hình ảnh có kích thước tương ứng với hình.
        picture_frame = slide.shapes.add_picture_frame(slides.ShapeType.RECTANGLE, 50, 50, image.width, image.height, image)

        # Lưu bản trình chiếu dưới dạng PPTX.
        presentation.save("picture_frame.pptx", slides.export.SaveFormat.PPTX)

Tạo Khung Hình Ảnh với Tỷ Lệ Tương Đối

Phần này minh họa cách đặt một hình ảnh với kích thước cố định, sau đó áp dụng tỷ lệ phần trăm riêng biệt cho chiều rộng và chiều cao. Vì các phần trăm có thể khác nhau, tỷ lệ khung hình có thể thay đổi. Việc phóng to/thu nhỏ được thực hiện dựa trên kích thước gốc của hình ảnh.

  1. Tạo một thể hiện của lớp Presentation .
  2. Lấy một slide theo chỉ số của nó.
  3. Tạo một PPImage bằng cách thêm hình ảnh vào ImageCollection của bản trình chiếu.
  4. Thêm một PictureFrame vào slide.
  5. Đặt chiều rộng và chiều cao tương đối cho khung hình ảnh.
  6. Lưu bản trình chiếu dưới dạng tệp PPTX.

Mã Python sau cho thấy cách tạo một khung hình ảnh với tỷ lệ tương đối:

import aspose.slides as slides

# Khởi tạo lớp Presentation để đại diện cho tệp PPTX.
with slides.Presentation() as presentation:
    # Lấy slide đầu tiên.
    slide = presentation.slides[0]

    # Thêm hình ảnh vào bộ sưu tập hình ảnh của bản trình chiếu.
    with open("image.jpeg", "rb") as image_stream:
        image = presentation.images.add_image(image_stream)

        # Thêm một khung hình ảnh vào slide.
        picture_frame = slide.shapes.add_picture_frame(slides.ShapeType.RECTANGLE, 50, 50, 100, 100, image)

        # Đặt tỷ lệ chiều rộng và chiều cao tương đối.
        picture_frame.relative_scale_height = 0.8
        picture_frame.relative_scale_width = 1.35

        # Lưu bản trình chiếu.
        presentation.save("relative_scaling.pptx", slides.export.SaveFormat.PPTX)

Trích Xuất Hình Ảnh Raster từ Khung Hình Ảnh

Bạn có thể trích xuất các hình ảnh raster từ các đối tượng PictureFrame và lưu chúng dưới dạng PNG, JPG và các định dạng khác. Ví dụ mã bên dưới minh họa cách trích xuất một hình ảnh từ tài liệu “sample.pptx” và lưu nó ở định dạng PNG.

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    first_slide = presentation.slides[0]
    first_shape = first_slide.shapes[0]

    if isinstance(first_shape, slides.PictureFrame):
        image = first_shape.picture_format.picture.image.image
        image.save("slide_1_shape_1.png", slides.ImageFormat.PNG)

Trích Xuất Hình Ảnh SVG từ Khung Hình Ảnh

Khi một bản trình chiếu chứa đồ họa SVG được đặt bên trong các hình dạng PictureFrame, Aspose.Slides for Python via .NET cho phép bạn lấy lại các hình ảnh vector gốc với độ trung thực đầy đủ. Bằng cách duyệt qua bộ sưu tập hình dạng của slide, bạn có thể xác định từng PictureFrame, kiểm tra xem PPImage nền có chứa nội dung SVG hay không, rồi lưu hình ảnh đó ra đĩa hoặc luồng ở định dạng SVG gốc.

Mã mẫu sau minh họa cách trích xuất một hình ảnh SVG từ khung hình ảnh:

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    slide = presentation.slides[0]
    shape = slide.shapes[0]

    if isinstance(shape, slides.PictureFrame):
        svg_image = shape.picture_format.picture.image.svg_image

        if svg_image is not None:
            with open("output.svg", "w", encoding="utf-8") as svg_stream:
                svg_stream.write(svg_image.svg_content)

Lấy Độ Trong Suốt Của Hình Ảnh

Aspose.Slides cho phép bạn lấy hiệu ứng trong suốt được áp dụng cho một hình ảnh. Đoạn mã Python sau thể hiện thao tác này:

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    picture_frame = presentation.slides[0].shapes[0]
    image_transform = picture_frame.picture_format.picture.image_transform
    for effect in image_transform:
        if isinstance(effect, slides.effects.AlphaModulateFixed):
            transparency_value = 100 - effect.amount
            print("Picture transparency: " + str(transparency_value))

Lấy Độ Sáng và Độ Tương Phản Của Hình Ảnh

Aspose.Slides cho phép bạn lấy hiệu ứng độ sáng và độ tương phản được áp dụng cho một hình ảnh. Lớp Luminance đại diện cho hiệu ứng chuyển đổi này.

Đoạn mã Python sau minh họa cách lấy các cài đặt độ sáng và độ tương phản từ một khung hình ảnh:

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    slide = presentation.slides[0]
    shape = slide.shapes[0]
    picture_frame = shape

    image_transform = picture_frame.picture_format.picture.image_transform
    for effect in image_transform:
        if isinstance(effect, slides.effects.Luminance):
            luminance = effect.get_effective()
            brightness = luminance.brightness
            contrast = luminance.contrast

            print("Brightness: " + str(brightness))
            print("Contrast: " + str(contrast))

Định Dạng Khung Hình Ảnh

Aspose.Slides cung cấp nhiều tùy chọn định dạng mà bạn có thể áp dụng cho một khung hình ảnh. Với các tùy chọn này, bạn có thể điều chỉnh khung hình ảnh để đáp ứng các yêu cầu cụ thể.

  1. Tạo một thể hiện của lớp Presentation .
  2. Lấy một slide theo chỉ số của nó.
  3. Tạo một PPImage bằng cách thêm hình ảnh vào ImageCollection của bản trình chiếu. Hình ảnh này sẽ được dùng để làm nền cho hình dạng.
  4. Xác định chiều rộng và chiều cao của khung.
  5. Tạo một PictureFrame có kích thước này bằng phương thức add_picture_frame của slide.
  6. Đặt màu đường viền cho khung hình ảnh.
  7. Đặt độ rộng đường viền cho khung hình ảnh.
  8. Xoay khung hình ảnh bằng cách cung cấp một giá trị dương (theo chiều kim đồng hồ) hoặc âm (ngược chiều kim đồng hồ).
  9. Lưu bản trình chiếu đã chỉnh sửa dưới dạng tệp PPTX.

Đoạn mã Python sau minh họa quy trình định dạng khung hình ảnh:

import aspose.slides as slides
import aspose.pydrawing as draw

# Khởi tạo lớp Presentation để đại diện cho tệp PPTX.
with slides.Presentation() as presentation:
    # Lấy slide đầu tiên.
    slide = presentation.slides[0]

    # Thêm hình ảnh vào bộ sưu tập hình ảnh của bản trình chiếu.
    with open("image.jpeg", "rb") as image_stream:
        image = presentation.images.add_image(image_stream)

        # Thêm một khung hình ảnh có kích thước tương ứng với hình.
        picture_frame = slide.shapes.add_picture_frame(slides.ShapeType.RECTANGLE, 50, 50, image.width, image.height, image)

        # Áp dụng định dạng cho khung hình ảnh.
        picture_frame.line_format.fill_format.fill_type = slides.FillType.SOLID
        picture_frame.line_format.fill_format.solid_fill_color.color = draw.Color.blue
        picture_frame.line_format.width = 20
        picture_frame.rotation = 45

    # Lưu bản trình chiếu dưới dạng PPTX.
    presentation.save("picture_formatting.pptx", slides.export.SaveFormat.PPTX)

Thêm Hình Ảnh dưới Dạng Liên Kết

Để giữ cho các tệp bản trình chiếu có kích thước nhỏ, bạn có thể thêm hình ảnh hoặc video dưới dạng liên kết thay vì nhúng trực tiếp các tệp vào bản trình chiếu. Đoạn mã Python sau cho thấy cách chèn một hình ảnh và một video vào một placeholder:

import aspose.slides as slides

with slides.Presentation("input.pptx") as presentation:
    slide = presentation.slides[0]

    shapes_to_remove = []

    for shape in slide.shapes:
        if shape.placeholder is None:
            continue

        if shape.placeholder.type == slides.PlaceholderType.PICTURE:
            picture_frame = slide.shapes.add_picture_frame(
                slides.ShapeType.RECTANGLE, shape.x, shape.y, shape.width, shape.height, None)

            picture_frame.picture_format.picture.link_path_long = \
                "https://upload.wikimedia.org/wikipedia/commons/3/3a/I.M_at_Old_School_Public_Broadcasting_in_October_2016_02.jpg"

            shapes_to_remove.append(shape)

        elif shape.placeholder.type == slides.PlaceholderType.MEDIA:
            video_frame = slide.shapes.add_video_frame(shape.X, shape.Y, shape.width, shape.height, "")

            video_frame.picture_format.picture.link_path_long = \
                "https://upload.wikimedia.org/wikipedia/commons/3/3a/I.M_at_Old_School_Public_Broadcasting_in_October_2016_02.jpg"

            video_frame.link_path_long = "https://youtu.be/t_1LYZ102RA"
            shapes_to_remove.append(shape)

    for shape in shapes_to_remove:
        slide.shapes.remove(shape)

    presentation.save("output.pptx", slides.export.SaveFormat.PPTX)

Cắt Hình Ảnh

Trong phần này, bạn sẽ học cách cắt vùng hiển thị của một hình ảnh trong khung hình ảnh mà không làm thay đổi tệp nguồn. Bạn cũng sẽ học phương pháp cơ bản để áp dụng các lề cắt nhằm tạo ra một bố cục sạch sẽ, tập trung trực tiếp trên slide.

Đoạn mã Python sau cho thấy cách cắt một hình ảnh trên slide:

import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    # Thêm hình ảnh vào bộ sưu tập hình ảnh của bản trình chiếu.
    with slides.Images.from_file("image.png") as source_image:
        image = presentation.images.add_image(source_image)

    # Thêm một khung hình ảnh vào slide.
    picture_frame = slide.shapes.add_picture_frame(slides.ShapeType.RECTANGLE, 100, 100, 420, 250, image)

    # Cắt hình ảnh (giá trị phần trăm).
    picture_frame.picture_format.crop_left = 23.6
    picture_frame.picture_format.crop_right = 21.5
    picture_frame.picture_format.crop_top = 3
    picture_frame.picture_format.crop_bottom = 31

    # Lưu kết quả.
    presentation.save("cropped_image.pptx", slides.export.SaveFormat.PPTX)

Xóa Các Vùng Đã Cắt Của Hình Ảnh

Nếu bạn muốn xóa các vùng đã cắt của một hình ảnh trong khung, hãy sử dụng phương thức delete_picture_cropped_areas. Phương thức này trả về hình ảnh đã cắt, hoặc hình ảnh gốc nếu không cần cắt.

Đoạn mã Python sau minh họa thao tác này:

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    slide = presentation.slides[0]

    # Lấy PictureFrame từ slide đầu tiên.
    picture_frame = slides.shape[0]

    # Lấy PictureFrame từ slide đầu tiên.
    cropped_image = picture_frame.picture_format.delete_picture_cropped_areas()

    # Lưu kết quả.
    presentation.save("deleted_cropped_areas.pptx", slides.export.SaveFormat.PPTX)

Nén Hình Ảnh

Bạn có thể nén một hình ảnh trong bản trình chiếu bằng phương thức PictureFillFormat.compress_image. Phương thức này nén hình ảnh bằng cách giảm kích thước dựa trên kích thước hình dạng và độ phân giải được chỉ định, với tùy chọn xóa các vùng đã cắt.

Nó điều chỉnh kích thước và độ phân giải của hình ảnh tương tự như tính năng Picture Format -> Compress Pictures -> Resolution của PowerPoint.

Các ví dụ Python sau minh họa cách nén một hình ảnh trong bản trình chiếu bằng cách chỉ định độ phân giải mục tiêu và tùy chọn xóa các vùng đã cắt:

import aspose.slides as slides

with slides.Presentation("demo.pptx") as presentation:
    slide = presentation.slides[0]
    picture_frame = slide.shapes[0]

    # Nén hình ảnh với độ phân giải mục tiêu 150 DPI (độ phân giải Web) và xóa các khu vực đã cắt.
    result = picture_frame.picture_format.compress_image(True, slides.export.PicturesCompression.DPI150)

    # Kiểm tra kết quả của quá trình nén.
    if result:
        print("Image successfully compressed.")
    else:
        print("Image compression failed or no changes were necessary.")

    presentation.save("compressed_image.pptx", slides.export.SaveFormat.PPTX)

Hoặc sử dụng giá trị DPI tùy chỉnh trực tiếp:

import aspose.slides as slides

with slides.Presentation("demo.pptx") as presentation:
    slide = presentation.slides[0]
    picture_frame = slide.shapes[0]

    # Nén hình ảnh tới 150 DPI (độ phân giải web), xóa các khu vực đã cắt.
    picture_frame.picture_format.compress_image(True, 150)

    presentation.save("compressed_image.pptx", slides.export.SaveFormat.PPTX)

Khóa Tỷ Lệ Khung Hình

Nếu bạn muốn một hình dạng chứa hình ảnh giữ nguyên tỷ lệ khung sau khi thay đổi kích thước của hình ảnh, hãy đặt thuộc tính aspect_ratio_locked thành True.

Đoạn mã Python sau cho thấy cách khóa tỷ lệ khung của một hình dạng:

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    layout = presentation.layout_slides.get_by_type(slides.SlideLayoutType.CUSTOM)
    empty_slide = presentation.slides.add_empty_slide(layout)

    with slides.Images.from_file("image.png") as source_image:
        image = presentation.images.add_image(source_image)

    picture_frame = empty_slide.shapes.add_picture_frame(slides.ShapeType.RECTANGLE, 50, 50, image.width, image.height, image)

    # Khóa tỷ lệ khung khi thay đổi kích thước.
    picture_frame.picture_frame_lock.aspect_ratio_locked = True

    presentation.save("aspect_ratio_locked.pptx", slides.export.SaveFormat.PPTX)

Sử Dụng Các Thuộc Tính Stretch Offset

Bằng cách sử dụng các thuộc tính stretch_offset_left, stretch_offset_top, stretch_offset_rightstretch_offset_bottom của lớp PictureFillFormat, bạn có thể định nghĩa một hình chữ nhật lấp đầy.

Khi được chỉ định stretch cho một hình ảnh, hình chữ nhật nguồn sẽ được thu phóng để vừa với hình chữ nhật lấp đầy. Mỗi cạnh của hình chữ nhật lấp đầy được xác định bằng một phần trăm độ lệch so với cạnh tương ứng của hộp bao quanh của hình dạng. Một phần trăm dương chỉ ra inset, trong khi một phần trăm âm chỉ ra outset.

  1. Tạo một thể hiện của lớp Presentation .
  2. Lấy tham chiếu tới một slide theo chỉ số của nó.
  3. Thêm một AutoShape dạng hình chữ nhật.
  4. Đặt loại fill cho hình dạng.
  5. Đặt chế độ fill ảnh cho hình dạng.
  6. Tải một hình ảnh.
  7. Gán hình ảnh để fill cho hình dạng.
  8. Xác định độ lệch của hình ảnh từ các cạnh tương ứng của hộp bao quanh của hình dạng.
  9. Lưu bản trình chiếu dưới dạng tệp PPTX.

Đoạn mã Python sau minh họa cách sử dụng các thuộc tính Stretch Offset:

import aspose.slides as slides

# Khởi tạo lớp Presentation đại diện cho tệp PPTX.
with slides.Presentation() as presentation:
    # Lấy slide đầu tiên.
    slide = presentation.slides[0]

    # Thêm một AutoShape dạng hình chữ nhật.
    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 20, 20, 300, 300)

    # Đặt loại fill cho hình dạng.
    shape.fill_format.fill_type = slides.FillType.PICTURE

    # Đặt chế độ fill ảnh cho hình dạng.
    shape.fill_format.picture_fill_format.picture_fill_mode = slides.PictureFillMode.STRETCH

    # Tải hình ảnh và thêm vào bản trình chiếu.
    with open("image.jpeg", "rb") as image_stream:
        image = presentation.images.add_image(image_stream)

    # Gán hình ảnh để fill cho hình dạng.
    shape.fill_format.picture_fill_format.picture.image = image

    # Xác định độ lệch của hình ảnh từ các cạnh tương ứng của hộp bao quanh của hình dạng.
    shape.fill_format.picture_fill_format.stretch_offset_left = 25
    shape.fill_format.picture_fill_format.stretch_offset_right = 25
    shape.fill_format.picture_fill_format.stretch_offset_top = -20
    shape.fill_format.picture_fill_format.stretch_offset_bottom = -10

    # Lưu tệp PPTX vào đĩa.
    presentation.save("stretch_offset.pptx", slides.export.SaveFormat.PPTX)

Câu Hỏi Thường Gặp

Làm thế nào để tôi biết những định dạng hình ảnh nào được hỗ trợ cho PictureFrame?

Aspose.Slides hỗ trợ cả hình ảnh raster (PNG, JPEG, BMP, GIF, v.v.) và hình ảnh vector (ví dụ, SVG) thông qua đối tượng ảnh được gán cho một PictureFrame. Danh sách các định dạng được hỗ trợ thường trùng với khả năng của engine chuyển đổi slide và hình ảnh.

Việc thêm hàng chục hình ảnh lớn sẽ ảnh hưởng như thế nào đến kích thước và hiệu năng của PPTX?

Nhúng hình ảnh lớn làm tăng kích thước tệp và mức sử dụng bộ nhớ; liên kết hình ảnh giúp giảm kích thước bản trình chiếu nhưng đòi hỏi các tệp bên ngoài phải luôn khả dụng. Aspose.Slides cung cấp khả năng thêm hình ảnh bằng liên kết để giảm kích thước tệp.

Làm sao tôi có thể khóa một đối tượng hình ảnh tránh việc di chuyển/điều chỉnh kích thước vô tình?

Sử dụng shape locks cho một PictureFrame (ví dụ, vô hiệu hoá di chuyển hoặc thay đổi kích thước). Cơ chế khóa được mô tả cho các hình dạng trong một bài viết bảo vệ riêng và được hỗ trợ cho nhiều loại hình dạng, bao gồm PictureFrame.

Độ trung thực của vector SVG có được giữ nguyên khi xuất bản trình chiếu sang PDF/hình ảnh không?

Aspose.Slides cho phép trích xuất một SVG từ một PictureFrame dưới dạng vector gốc. Khi xuất ra PDF hoặc định dạng raster, kết quả có thể được raster hoá tùy thuộc vào cài đặt xuất; việc SVG gốc được lưu dưới dạng vector được xác nhận qua hành vi trích xuất.