在演示文稿中处理图像 — Aspose.Slides FOSS for C++

Aspose.Slides FOSS for C++ 允许您将图像嵌入演示文稿的共享图像集合,并通过 PictureFrame 形状在幻灯片上显示它们。图像还可以通过 FillType::PICTURE 用作形状的背景填充。


从文件添加图像

从磁盘加载图像字节并使用 pres.images().add_image() 将其添加到演示文稿的图像集合中。然后将图像作为 PictureFrame 放置在幻灯片上:

#include <Aspose/Slides/Foss/export/save_format.h>
#include <Aspose/Slides/Foss/image_collection.h>
#include <Aspose/Slides/Foss/picture_frame.h>
#include <Aspose/Slides/Foss/pp_image.h>
#include <Aspose/Slides/Foss/presentation.h>
#include <Aspose/Slides/Foss/shape_collection.h>
#include <Aspose/Slides/Foss/shape_type.h>
#include <Aspose/Slides/Foss/slide.h>
#include <Aspose/Slides/Foss/slide_collection.h>

#include <cstdint>
#include <fstream>
#include <iterator>
#include <vector>

using namespace Aspose::Slides::Foss;

int main() {
    Presentation pres;

    // Add the image to the shared collection
    std::ifstream f("logo.png", std::ios::binary);
    std::vector<std::uint8_t> data(
        (std::istreambuf_iterator<char>(f)),
        std::istreambuf_iterator<char>());
    auto& img = pres.images().add_image(data);

    // Place it on the slide as a PictureFrame
    pres.slides()[0].shapes().add_picture_frame(
        ShapeType::RECTANGLE, 50, 50, 300, 200, img);

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

add_picture_frame() 的四个位置参数是:x, y, width, height(以点为单位)。


从字节向量添加图像

如果您已经在内存中拥有图像字节(例如,从 URL 下载或从数据库读取),请直接将它们传递给 add_image()

#include <Aspose/Slides/Foss/export/save_format.h>
#include <Aspose/Slides/Foss/image_collection.h>
#include <Aspose/Slides/Foss/pp_image.h>
#include <Aspose/Slides/Foss/presentation.h>
#include <Aspose/Slides/Foss/shape_collection.h>
#include <Aspose/Slides/Foss/shape_type.h>
#include <Aspose/Slides/Foss/slide.h>
#include <Aspose/Slides/Foss/slide_collection.h>

#include <cstdint>
#include <fstream>
#include <iterator>
#include <vector>

using namespace Aspose::Slides::Foss;

int main() {
    // Simulate having bytes in memory
    std::ifstream f("photo.jpg", std::ios::binary);
    std::vector<std::uint8_t> image_bytes(
        (std::istreambuf_iterator<char>(f)),
        std::istreambuf_iterator<char>());

    Presentation pres;
    auto& img = pres.images().add_image(image_bytes);
    pres.slides()[0].shapes().add_picture_frame(
        ShapeType::RECTANGLE, 100, 80, 400, 250, img);
    pres.save("from-bytes.pptx", SaveFormat::PPTX);
    return 0;
}

对 PictureFrame 的定位和尺寸设置

add_picture_frame() 返回的 PictureFrame 继承所有 Shape 几何属性,并且可以在创建后重新定位:

#include <Aspose/Slides/Foss/export/save_format.h>
#include <Aspose/Slides/Foss/image_collection.h>
#include <Aspose/Slides/Foss/picture_frame.h>
#include <Aspose/Slides/Foss/pp_image.h>
#include <Aspose/Slides/Foss/presentation.h>
#include <Aspose/Slides/Foss/shape_collection.h>
#include <Aspose/Slides/Foss/shape_type.h>
#include <Aspose/Slides/Foss/slide.h>
#include <Aspose/Slides/Foss/slide_collection.h>

#include <cstdint>
#include <fstream>
#include <iterator>
#include <vector>

using namespace Aspose::Slides::Foss;

int main() {
    Presentation pres;
    std::ifstream f("photo.jpg", std::ios::binary);
    std::vector<std::uint8_t> data(
        (std::istreambuf_iterator<char>(f)),
        std::istreambuf_iterator<char>());
    auto& img = pres.images().add_image(data);

    auto& pf = pres.slides()[0].shapes().add_picture_frame(
        ShapeType::RECTANGLE, 0, 0, 100, 100, img);

    // Reposition and resize after creation
    pf.set_x(50);
    pf.set_y(100);
    pf.set_width(350);
    pf.set_height(250);

    pres.save("positioned.pptx", SaveFormat::PPTX);
    return 0;
}

使用图像作为形状填充

任何形状(不仅限于 PictureFrame)都可以使用图像作为其背景填充。将 fill_type 设置为 FillType::PICTURE 并将图像分配给图片填充格式:

#include <Aspose/Slides/Foss/auto_shape.h>
#include <Aspose/Slides/Foss/export/save_format.h>
#include <Aspose/Slides/Foss/fill_format.h>
#include <Aspose/Slides/Foss/fill_type.h>
#include <Aspose/Slides/Foss/image_collection.h>
#include <Aspose/Slides/Foss/picture_fill_mode.h>
#include <Aspose/Slides/Foss/pp_image.h>
#include <Aspose/Slides/Foss/presentation.h>
#include <Aspose/Slides/Foss/shape_collection.h>
#include <Aspose/Slides/Foss/shape_type.h>
#include <Aspose/Slides/Foss/slide.h>
#include <Aspose/Slides/Foss/slide_collection.h>

#include <cstdint>
#include <fstream>
#include <iterator>
#include <vector>

using namespace Aspose::Slides::Foss;

int main() {
    Presentation pres;
    std::ifstream f("background.png", std::ios::binary);
    std::vector<std::uint8_t> data(
        (std::istreambuf_iterator<char>(f)),
        std::istreambuf_iterator<char>());
    auto& img = pres.images().add_image(data);

    auto& slide = pres.slides()[0];
    auto& shape = slide.shapes().add_auto_shape(
        ShapeType::ROUND_CORNER_RECTANGLE, 50, 50, 400, 250);
    shape.fill_format().set_fill_type(FillType::PICTURE);
    shape.fill_format().picture_fill_format().set_picture_fill_mode(PictureFillMode::STRETCH);
    shape.fill_format().picture_fill_format().picture().set_image(&img);

    pres.save("picture-fill.pptx", SaveFormat::PPTX);
    return 0;
}

PictureFillMode::STRETCH 将图像缩放以填满整个形状。使用 TILE 来实现重复图案。


另请参见

 中文