كيفية إضافة الصور إلى شرائح PowerPoint باستخدام C++
تُدمج الصور في Aspose.Slides FOSS كـ إطارات صور، وهي أشكال تحتفظ بصورة ويمكن وضعها، وتغيير حجمها، وتنسيقها مثل أي شكل آخر. تُخزن بيانات الصورة مرة واحدة في مجموعة prs.images() ويتم الإشارة إليها بواسطة الإطار.
المتطلبات المسبقة
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 .إضافة صورة من ملف
#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;
}التوقيع add_picture_frame:
add_picture_frame(shape_type, x, y, width, height, image) -> PictureFrame&جميع الأبعاد بوحدة النقاط (نقطة واحدة = 1/72 بوصة). لشريحة قياسية بحجم 10 × 7.5 بوصة، مساحة الإحداثيات هي 720 × 540 نقطة.
إضافة صورة من مخزن الذاكرة
إذا كان لديك الصورة بالفعل على شكل بايتات (مثلاً، تم تنزيلها من شبكة أو قرأتها من قاعدة بيانات):
#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;
}تحكم في وضع التعبئة
تتحكم picture_format() على PictureFrame في كيفية ملء الصورة لحدود الإطار:
#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;
}PictureFillMode | السلوك |
|---|---|
STRETCH | قُم بتكبير الصورة لملء الإطار، متجاهلاً نسبة الأبعاد |
TILE | كرّر الصورة كنمط متكرر |
إضافة صور متعددة إلى شرائح مختلفة
#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;
}عدّ الصور في عرض تقديمي موجود
#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;
}مجموعة prs.images() مشتركة عبر جميع الشرائح: يتم تخزين بايتات الصورة نفسها مرة واحدة حتى إذا ظهر إطار الصورة في شرائح متعددة.