Cách Thêm Hình Ảnh vào Các Slide PowerPoint trong C++

Cách Thêm Hình Ảnh vào Các Slide PowerPoint trong C++

Hình ảnh trong Aspose.Slides FOSS được nhúng dưới dạng khung hình, các hình dạng chứa hình ảnh và có thể được định vị, thay đổi kích thước và tạo kiểu như bất kỳ hình dạng nào khác. Dữ liệu hình ảnh được lưu trữ một lần trong bộ sưu tập prs.images() và được tham chiếu bởi khung.


Điều kiện tiên quyết

git clone https://github.com/aspose-slides-foss/Aspose.Slides-FOSS-for-Cpp.git
cd Aspose.Slides-FOSS-for-Cpp && mkdir build && cd build
cmake .. && cmake --build .

Thêm một hình ảnh từ tệp

#include <Aspose/Slides/Foss/presentation.h>
#include <fstream>
#include <vector>

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs;
    auto& slide = prs.slides()[0];

    // Load image into the presentation's image collection
    std::ifstream file("photo.jpg", std::ios::binary);
    std::vector<uint8_t> data((std::istreambuf_iterator<char>(file)),
                               std::istreambuf_iterator<char>());
    auto& img = prs.images().add_image(data);

    // Add a picture frame at (x=50, y=50, width=400, height=300) in points
    slide.shapes().add_picture_frame(
        asf::ShapeType::RECTANGLE, 50, 50, 400, 300, img);

    prs.save("with-image.pptx", asf::SaveFormat::PPTX);
    return 0;
}

Chữ ký add_picture_frame:

add_picture_frame(shape_type, x, y, width, height, image) -> PictureFrame&

Tất cả các kích thước đều tính bằng points (1 point = 1/72 inch). Đối với một slide tiêu chuẩn kích thước 10 x 7,5 inch, không gian tọa độ là 720 x 540 points.


Thêm hình ảnh từ bộ đệm bộ nhớ

Nếu bạn đã có hình ảnh dưới dạng byte (ví dụ: tải xuống từ mạng hoặc đọc từ cơ sở dữ liệu):

#include <Aspose/Slides/Foss/presentation.h>
#include <vector>

int main() {
    namespace asf = Aspose::Slides::Foss;

    // Assume image_bytes is populated from some source
    std::vector<uint8_t> image_bytes = /* ... */;

    asf::Presentation prs;
    auto& img = prs.images().add_image(image_bytes);

    prs.slides()[0].shapes().add_picture_frame(
        asf::ShapeType::RECTANGLE, 200, 100, 300, 200, img);
    prs.save("logo-slide.pptx", asf::SaveFormat::PPTX);
    return 0;
}

Điều khiển chế độ tô

picture_format() trên một PictureFrame kiểm soát cách hình ảnh lấp đầy giới hạn khung:

#include <Aspose/Slides/Foss/presentation.h>
#include <fstream>
#include <vector>

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs;

    std::ifstream file("texture.png", std::ios::binary);
    std::vector<uint8_t> data((std::istreambuf_iterator<char>(file)),
                               std::istreambuf_iterator<char>());
    auto& img = prs.images().add_image(data);

    auto& frame = prs.slides()[0].shapes().add_picture_frame(
        asf::ShapeType::RECTANGLE, 50, 50, 600, 350, img);

    // STRETCH: scale image to fill the frame exactly (default)
    frame.picture_format().set_picture_fill_mode(asf::PictureFillMode::STRETCH);

    // TILE: repeat the image in a grid pattern
    // frame.picture_format().set_picture_fill_mode(asf::PictureFillMode::TILE);

    prs.save("filled.pptx", asf::SaveFormat::PPTX);
    return 0;
}
PictureFillModeHành vi
STRETCHPhóng to hình ảnh để lấp đầy khung, bỏ qua tỷ lệ khung hình
TILELặp lại hình ảnh dưới dạng mẫu ghép lát

Thêm Nhiều Hình Ảnh vào Các Slide Khác Nhau

#include <Aspose/Slides/Foss/presentation.h>
#include <fstream>
#include <vector>
#include <string>
#include <filesystem>

int main() {
    namespace asf = Aspose::Slides::Foss;

    std::vector<std::string> image_files = {"slide1.jpg", "slide2.jpg", "slide3.jpg"};

    asf::Presentation prs;
    auto& layout = prs.slides()[0].layout_slide();

    // Ensure enough slides exist
    while (prs.slides().size() < image_files.size()) {
        prs.slides().add_empty_slide(layout);
    }

    for (size_t i = 0; i < image_files.size(); ++i) {
        if (!std::filesystem::exists(image_files[i])) continue;

        std::ifstream file(image_files[i], std::ios::binary);
        std::vector<uint8_t> data((std::istreambuf_iterator<char>(file)),
                                   std::istreambuf_iterator<char>());
        auto& img = prs.images().add_image(data);
        prs.slides()[i].shapes().add_picture_frame(
            asf::ShapeType::RECTANGLE, 0, 0, 720, 540, img);
    }

    prs.save("multi-image.pptx", asf::SaveFormat::PPTX);
    return 0;
}

Đếm hình ảnh trong bản trình chiếu hiện có

#include <Aspose/Slides/Foss/presentation.h>
#include <iostream>

int main() {
    namespace asf = Aspose::Slides::Foss;

    asf::Presentation prs("with-image.pptx");
    std::cout << "Presentation contains " << prs.images().size() << " image(s)\n";
    return 0;
}

Bộ sưu tập prs.images() được chia sẻ trên tất cả các slide: cùng một byte hình ảnh được lưu một lần ngay cả khi khung ảnh xuất hiện trên nhiều slide.


Xem thêm

 Tiếng Việt