แปลงสไลด์การนำเสนอเป็นภาพใน C++
บทนำ
Aspose.Slides สำหรับ C++ สามารถเรนเดอร์สไลด์แต่ละสไลด์จากงานนำเสนอ PowerPoint และ OpenDocument ให้เป็นรูปแบบ PNG, JPEG, GIF, TIFF และรูปแบบภาพอื่น ๆ
เพื่อแปลงสไลด์เป็นภาพ ให้ทำตามขั้นตอนต่อไปนี้:
- โหลดงานนำเสนอด้วยคลาส Presentation
- เลือกสไลด์ที่คุณต้องการเรนเดอร์
- หากจำเป็น ให้กำหนดค่าการเรนเดอร์ด้วยคลาส RenderingOptions หรือ TiffOptions
- เรียกเมธอด ISlide::GetImage ซึ่งจะคืนค่าอ็อบเจ็กต์ IImage
- เรียกเมธอด IImage::Save และระบุรูปแบบเอาต์พุตด้วยค่า ImageFormat
แปลงสไลด์เป็นภาพ PNG
การแปลงที่ง่ายที่สุดใช้การตั้งค่าเรนเดอร์เริ่มต้น อ็อบเจ็กต์ IImage ที่ได้สามารถประมวลผลในหน่วยความจำหรือบันทึกลงไฟล์ได้
ตัวอย่าง C++ ด้านล่างจะเรนเดอร์สไลด์แรกและบันทึกเป็นภาพ PNG:
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <IImage.h>
#include <ImageFormat.h>
#include <system/smart_ptr.h>
using namespace Aspose::Slides;
using namespace System;
auto presentation = MakeObject<Presentation>(u"Presentation.pptx");
auto slide = presentation->get_Slide(0);
auto image = slide->GetImage();
image->Save(u"Slide_0.png", ImageFormat::Png);
image->Dispose();
presentation->Dispose();
แปลงสไลด์เป็นภาพด้วยขนาดที่กำหนดเอง
ใช้การโอเวอร์โหลดของ ISlide::GetImage ที่รับค่า Size เพื่อเรนเดอร์สไลด์ด้วยขนาดพิกเซลที่แน่นอน
ตัวอย่างต่อไปนี้สร้างภาพ JPEG ขนาด 1820 × 1040:
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <IImage.h>
#include <ImageFormat.h>
#include <drawing/size.h>
#include <system/smart_ptr.h>
using namespace Aspose::Slides;
using namespace System;
using namespace System::Drawing;
Size imageSize(1820, 1040);
auto presentation = MakeObject<Presentation>(u"Presentation.pptx");
auto slide = presentation->get_Slide(0);
auto image = slide->GetImage(imageSize);
image->Save(u"Slide_0.jpg", ImageFormat::Jpeg);
image->Dispose();
presentation->Dispose();
แปลงสไลด์ที่มีบันทึกย่อและคอมเมนต์เป็นภาพ
โดยค่าเริ่มต้น ภาพสไลด์จะไม่รวมบันทึกย่อหรือคอมเมนต์ ให้กำหนดอ็อบเจ็กต์ NotesCommentsLayoutingOptions ให้กับเมธอด RenderingOptions::set_SlidesLayoutOptions เพื่อควบคุมตำแหน่งที่บันทึกย่อและคอมเมนต์จะแสดง
ตัวอย่างต่อไปนี้วางบันทึกย่อที่ถูกตัดท้ายด้านล่างสไลด์และคอมเมนต์ทางด้านขวาของสไลด์:
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <Export/CommentsPositions.h>
#include <Export/NotesCommentsLayoutingOptions.h>
#include <Export/NotesPositions.h>
#include <Export/RenderingOptions.h>
#include <IImage.h>
#include <ImageFormat.h>
#include <drawing/color.h>
#include <system/smart_ptr.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
using namespace System::Drawing;
float scaleX = 2.0f;
float scaleY = scaleX;
auto layoutOptions = MakeObject<NotesCommentsLayoutingOptions>();
layoutOptions->set_NotesPosition(NotesPositions::BottomTruncated);
layoutOptions->set_CommentsPosition(CommentsPositions::Right);
layoutOptions->set_CommentsAreaWidth(500);
layoutOptions->set_CommentsAreaColor(Color::get_AntiqueWhite());
auto renderingOptions = MakeObject<RenderingOptions>();
renderingOptions->set_SlidesLayoutOptions(layoutOptions);
auto presentation = MakeObject<Presentation>(u"Presentation_with_notes_and_comments.pptx");
auto slide = presentation->get_Slide(0);
auto image = slide->GetImage(renderingOptions, scaleX, scaleY);
image->Save(u"Image_with_notes_and_comments_0.gif", ImageFormat::Gif);
image->Dispose();
presentation->Dispose();
Warning
สำหรับการแปลงสไลด์เป็นภาพ อย่าเรียกเมธอด NotesCommentsLayoutingOptions::set_NotesPosition ให้เป็นค่า BottomFull เนื่องจากบันทึกย่ออาจมีข้อความมากกว่าที่ขนาดภาพคงที่จะบรรจุได้ ให้ใช้ BottomTruncated แทนแปลงสไลด์เป็นภาพโดยใช้ตัวเลือก TIFF
คลาส TiffOptions ให้คุณควบคุมขนาด ความละเอียด และคุณสมบัติอื่น ๆ ของภาพ TIFF ที่เรนเดอร์
ตัวอย่างต่อไปนี้เรนเดอร์สไลด์แรกเป็นภาพ TIFF ขนาด 2160 × 2880 ที่ความละเอียด 300 DPI:
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <Export/TiffOptions.h>
#include <IImage.h>
#include <ImageFormat.h>
#include <drawing/size.h>
#include <system/smart_ptr.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
using namespace System::Drawing;
auto tiffOptions = MakeObject<TiffOptions>();
tiffOptions->set_ImageSize(Size(2160, 2880));
tiffOptions->set_DpiX(300);
tiffOptions->set_DpiY(300);
auto presentation = MakeObject<Presentation>(u"sample.pptx");
auto slide = presentation->get_Slide(0);
auto image = slide->GetImage(tiffOptions);
image->Save(u"output.tiff", ImageFormat::Tiff);
image->Dispose();
presentation->Dispose();
แปลงสไลด์ทั้งหมดเป็นภาพ
วนลูปผ่านคอลเลกชันสไลด์เพื่อแปลงงานนำเสนอทั้งหมดเป็นชุดของภาพ โดยสไลด์ที่ซ่อนอยู่จะถูกรวมไว้ เว้นแต่คุณจะข้ามโดยเจตนา
ตัวอย่างต่อไปนี้เรนเดอร์สไลด์ทั้งหมดเป็นภาพ JPEG โดยใช้ค่าสเกลแนวนอนและแนวตั้งเป็น 2:
#include <DOM/ISlide.h>
#include <DOM/ISlideCollection.h>
#include <DOM/Presentation.h>
#include <IImage.h>
#include <ImageFormat.h>
#include <system/smart_ptr.h>
#include <system/string.h>
using namespace Aspose::Slides;
using namespace System;
float scaleX = 2.0f;
float scaleY = scaleX;
auto presentation = MakeObject<Presentation>(u"Presentation.pptx");
int32_t slideCount = presentation->get_Slides()->get_Count();
for (int32_t index = 0; index < slideCount; index++)
{
auto slide = presentation->get_Slide(index);
auto image = slide->GetImage(scaleX, scaleY);
image->Save(String::Format(u"Slide_{0}.jpg", index), ImageFormat::Jpeg);
image->Dispose();
}
presentation->Dispose();
สร้างเอาต์พุต Enhanced Metafile
Enhanced Metafile (EMF) มีประโยชน์เมื่อกราฟิกแบบเวกเตอร์ต้องแลกเปลี่ยนกับ Microsoft Office หรือแอปพลิเคชัน Windows อื่น ๆ ที่สนับสนุน Windows metafile ต่างจากภาพแบบพิกเซล EMF สามารถเก็บการวาดเวกเตอร์ที่ขยายได้โดยไม่สูญเสียความคมชัด อย่างไรก็ตาม EMF เป็นรูปแบบความเข้ากันได้สำหรับแอปพลิเคชันที่รองรับ Windows metafile ไม่ได้เป็นรูปแบบการแลกเปลี่ยนสากล นอกจากนี้เนื้อหาในสไลด์ที่ซับซ้อน เช่น ภาพบิตแมปและเอฟเฟกต์บางอย่าง อาจถูกจัดเก็บเป็นองค์ประกอบแบบเรสเตอร์ภายในคอนเทนเนอร์เมตาฟายล์เวกเตอร์
ส่งออกสไลด์เป็น EMF
เมธอด ISlide::WriteAsEmf จะเขียนอ็อบเจ็กต์ ISlide ไปยังสตรีมเป้าหมายในรูปแบบ EMF ตัวอย่างต่อไปนี้โหลดงานนำเสนอ เลือกสไลด์แรก และเขียนลงสตรีมไฟล์ EMF:
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <system/io/file.h>
#include <system/smart_ptr.h>
using namespace Aspose::Slides;
using namespace System;
using namespace System::IO;
auto presentation = MakeObject<Presentation>(u"Presentation.pptx");
auto slide = presentation->get_Slide(0);
auto emfStream = File::Create(u"Slide_0.emf");
slide->WriteAsEmf(emfStream);
emfStream->Close();
presentation->Dispose();
ผู้เรียกต้องเป็นเจ้าของสตรีมที่ส่งให้กับ ISlide::WriteAsEmf และต้องปิดหรือทำลายสตรีมนั้น Aspose.Slides จะเขียนที่ตำแหน่งปัจจุบันของสตรีมและปล่อยให้สตรีมเปิดอยู่
แปลงภาพ SVG เป็น EMF แล้วเพิ่มลงในงานนำเสนอ
ใช้ ISvgImage::WriteAsEmf เพื่อแปลงเนื้อหา SVG เป็น EMF ไบต์ที่ได้สามารถเพิ่มลงในงานนำเสนอผ่าน IImageCollection::AddImage และวางบนสไลด์ด้วย IShapeCollection::AddPictureFrame
ตัวอย่างต่อไปนี้สร้างอ็อบเจ็กต์ SvgImage จากโค้ด SVG แปลงเป็น EMF ในหน่วยความจำ แทรกเมตาฟายล์ในสไลด์แรก และบันทึกงานนำเสนอ:
#include <DOM/IImageCollection.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <DOM/ShapeType.h>
#include <DOM/SvgImage.h>
#include <Export/SaveFormat.h>
#include <system/io/memory_stream.h>
#include <system/smart_ptr.h>
#include <system/string.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
using namespace System::IO;
String svgContent = u"<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"200\" height=\"100\"><rect width=\"200\" height=\"100\" fill=\"#4472C4\"/></svg>";
auto svgImage = MakeObject<SvgImage>(svgContent);
auto presentation = MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto emfStream = MakeObject<MemoryStream>();
svgImage->WriteAsEmf(emfStream);
auto emfData = emfStream->ToArray();
auto image = presentation->get_Images()->AddImage(emfData);
slide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 20, 20, 200, 100, image);
presentation->Save(u"Presentation_with_emf.pptx", SaveFormat::Pptx);
emfStream->Close();
presentation->Dispose();
ISvgImage::WriteAsEmf ไม่ได้เป็นเจ้าของสตรีมปลายทาง หลังจากเขียน สตรีมจะอยู่ที่ตำแหน่งท้ายข้อมูลที่สร้างขึ้น ตัวอย่างเรียก MemoryStream::ToArray เพื่อรับบัฟเฟอร์เต็มโดยไม่คำนึงถึงตำแหน่งสตรีมปัจจุบัน แล้วส่งอาร์เรย์ไบต์นั้นไปยัง IImageCollection::AddImage ให้เปิดสตรีมไว้จนกว่าผู้ใช้จะอ่านจบ แล้วปิดสตรีมหลังจากนั้น
การสร้าง EMF มีให้ใช้บนระบบปฏิบัติการที่สนับสนุนโดย Aspose.Slides สำหรับ C++ แต่การเรนเดอร์อาจแตกต่างกันระหว่างแพลตฟอร์มเมื่อไม่มีฟอนต์หรือไลบรารีกราฟิกพื้นฐาน ติดตั้งฟอนต์ที่ใช้ในเนื้อหาเดิมหรือกำหนดการทดแทนที่เหมาะสม ปฏิบัติตาม platform requirements ของ Aspose.Slides สำหรับ C++ และตรวจสอบผลลัพธ์ในแอปพลิเคชันที่รับ EMF เป้าหมาย แอปพลิเคชันบน Linux และ macOS มักมีการสนับสนุนการแสดงและแก้ไข Windows metafile ที่จำกัดหรือไม่สม่ำเสมอ
การเรนเดอร์ Emoji สี
Note
เพื่อให้การเรนเดอร์ emoji สีถูกต้องเมื่อแปลงสไลด์งานนำเสนอเป็นภาพ ต้องติดตั้งและให้ฟอนต์ emoji ที่ใช้ในงานนำเสนอพร้อมใช้งานบนระบบที่ทำการแปลง ตัวอย่างเช่น หากงานนำเสนอใช้ Segoe UI Emoji แต่ฟอนต์นี้หายไป emoji อาจปรากฏเป็นสีเดียวในภาพผลลัพธ์คำถามที่พบบ่อย
Aspose.Slides รองรับการเรนเดอร์สไลด์ที่มีแอนิเมชันหรือไม่? ไม่มี เมธอด ISlide::GetImage จะเรนเดอร์ภาพสไลด์แบบคงที่และไม่ส่งออกแอนิเมชัน
สามารถส่งออกสไลด์ที่ซ่อนอยู่เป็นภาพได้หรือไม่? ได้ สไลด์ที่ซ่อนอยู่สามารถเรนเดอร์ได้เช่นสไลด์ปกติ ให้รวมสไลด์เหล่านั้นในลูปประมวลผลตามตัวอย่างข้างต้น
เงาและเอฟเฟกต์อื่น ๆ ถูกเก็บไว้ในภาพสไลด์หรือไม่? ได้ Aspose.Slides จะเรนเดอร์เงา, ความโปร่งใส และเอฟเฟกต์กราฟิกที่สนับสนุนอื่น ๆ ในภาพสไลด์