จัดการกรอบรูปภาพในงานนำเสนอโดยใช้ C++
ภาพรวม
กรอบรูปภาพคือรูปร่างบนสไลด์ที่แสดงรูปภาพ ใน Aspose.Slides, ทรัพยากรรูปภาพและรูปร่างที่แสดงรูปภาพแยกกันเป็นอ็อบเจกต์: a Presentation owns embedded image resources through its image collection, while an IPictureFrame controls the image’s position, size, line formatting, rotation, cropping, picture effects, and other frame-level settings.
การแยกนี้มีประโยชน์เมื่อรูปภาพเดียวกันต้องแสดงหลายครั้ง เพิ่มรูปภาพลงในงานนำเสนอเพียงครั้งเดียว, เก็บ IPPImage ที่ได้รับคืน, แล้วใช้ทรัพยากรรูปภาพนั้นเมื่อสร้างกรอบรูปภาพ
กรอบรูปภาพสามารถบรรจุรูปแบบแรสเตอร์เช่น PNG หรือ JPEG และรูปแบบเวกเตอร์ SVG ได้ นอกจากนี้ยังสามารถอ้างอิงรูปภาพที่เชื่อมโยงแทนการเก็บไบต์ของรูปภาพไว้ในงานนำเสนอ การเลือกนี้มีผลต่อความพกพา, ขนาดไฟล์, การสกัดและพฤติกรรมการส่งออก ดังนั้นจึงควรตัดสินใจว่าจะเก็บรูปภาพอย่างไรก่อนที่จะทำการจัดรูปแบบหรือเพิ่มประสิทธิภาพ
เพิ่มและจัดรูปแบบภาพที่ฝัง
สำหรับภาพที่ฝัง, ให้เพิ่มข้อมูลภาพลงในงานนำเสนอและสร้างกรอบรูปภาพด้วย IShapeCollection::AddPictureFrame. ภาพจะกลายเป็นส่วนหนึ่งของแพ็คเกจงานนำเสนอ ทำให้งานนำเสนอเป็นอิสระเมื่อนำไปใช้บนคอมพิวเตอร์เครื่องอื่น
ตัวอย่างต่อไปนี้เพิ่มภาพ JPEG, สร้างกรอบที่มีขนาดตามมิติเดิมของภาพ, แล้วใช้การจัดรูปแบบเส้นและการหมุน:
#include <DOM/FillType.h>
#include <DOM/IColorFormat.h>
#include <DOM/IImageCollection.h>
#include <DOM/ILineFillFormat.h>
#include <DOM/ILineFormat.h>
#include <DOM/IPPImage.h>
#include <DOM/IPictureFrame.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <DOM/ShapeType.h>
#include <Export/SaveFormat.h>
#include <IImage.h>
#include <Util/Images.h>
#include <drawing/color.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
using namespace System::Drawing;
auto presentation = MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto sourceImage = Images::FromFile(u"photo.jpg");
auto image = presentation->get_Images()->AddImage(sourceImage);
auto pictureFrame = slide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 50, 100, image->get_Width(), image->get_Height(), image);
pictureFrame->get_LineFormat()->get_FillFormat()->set_FillType(FillType::Solid);
pictureFrame->get_LineFormat()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Blue());
pictureFrame->get_LineFormat()->set_Width(3.0);
pictureFrame->set_Rotation(15.0f);
presentation->Save(u"picture-frame.pptx", SaveFormat::Pptx);
presentation->Dispose();
กรอบรูปภาพควบคุมเรดิยายที่แสดง; การเปลี่ยนขนาดกรอบจะไม่เปลี่ยนมิติพิกเซลดั้งเดิมที่เก็บในทรัพยากรภาพที่ฝัง ความแตกต่างนี้สำคัญเมื่อทำการครอบหรือบีบอัดภาพในภายหลัง
ใช้สเกลสัมพัทธ์
IPictureFrame เปิดเผยการปรับสเกลความกว้างและความสูงแบบสัมพัทธ์สำหรับกรอบ ค่า 1.0 หมายถึง 100% ของขนาดรูปภาพต้นฉบับ สเกลสัมพัทธ์มีประโยชน์เมื่อเวิร์กโฟลว์ต้องการคงอัตราส่วนกับขนาดรูปภาพต้นฉบับแทนการคำนวณขนาดสุดท้ายด้วยตนเอง
#include <DOM/IImageCollection.h>
#include <DOM/IPPImage.h>
#include <DOM/IPictureFrame.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <DOM/ShapeType.h>
#include <Export/SaveFormat.h>
#include <IImage.h>
#include <Util/Images.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
auto presentation = MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto sourceImage = Images::FromFile(u"photo.jpg");
auto image = presentation->get_Images()->AddImage(sourceImage);
auto pictureFrame = slide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 50, 50, 100, 100, image);
pictureFrame->set_RelativeScaleWidth(1.35f);
pictureFrame->set_RelativeScaleHeight(0.8f);
presentation->Save(u"relative-scale.pptx", SaveFormat::Pptx);
presentation->Dispose();
สเกลสัมพัทธ์เปลี่ยนการตั้งค่าสเกลของกรอบ; มันไม่ได้ทำการรีแซมพลล์หรือบีบอัดภาพที่ฝัง
ภาพที่ฝังและภาพที่เชื่อมโยง
ภาพที่ฝังเก็บข้อมูลภาพไว้ภายในงานนำเสนอจึงเป็นตัวเลือกที่ปลอดภัยที่สุดสำหรับความพกพาและการแสดงผลที่คาดเดาได้ ส่วนภาพที่เชื่อมโยงจะเก็บพาธลิงก์ของ ISlidesPicture แทนการฝังข้อมูลภาพในไฟล์เดียวกัน
ภาพที่เชื่อมโยงสามารถลดปริมาณข้อมูลภาพที่เก็บใน PPTX ได้ แต่ก็สร้างการพึ่งพาไฟล์ภายนอก ไฟล์ที่เชื่อมโยงต้องยังคงเข้าถึงได้สำหรับแอปพลิเคชันที่เปิดหรือแสดงงานนำเสนอ หากพาธเปลี่ยน, ไฟล์ถูกย้าย, หรือทรัพยากรไม่พร้อมใช้งาน, ภาพที่เชื่อมโยงอาจไม่แสดงตามที่คาดหวัง สำหรับงานนำเสนอที่ต้องส่งทางอีเมล, จัดเก็บ, หรือแสดงผลในสภาพแยก, ภาพที่ฝังมักจะน่าเชื่อถือกว่า
เพิ่มภาพที่เชื่อมโยง
ตัวอย่างต่อไปนี้สร้างกรอบรูปภาพและชี้ไปยังไฟล์ภาพในเครื่องโดยตรง ตัวอย่างนี้จัดการเฉพาะการเชื่อมโยงภาพ; การเชื่อมโยงวิดีโอเป็นเวิร์กโฟลว์สื่อแยกต่างหากและไม่ได้รวมไว้ในตัวอย่างนี้
#include <DOM/IPictureFillFormat.h>
#include <DOM/IPictureFrame.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/ISlidesPicture.h>
#include <DOM/Presentation.h>
#include <DOM/ShapeType.h>
#include <Export/SaveFormat.h>
#include <system/io/path.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
using namespace System::IO;
auto presentation = MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto pictureFrame = slide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 50, 50, 320, 180, nullptr);
auto linkPath = Path::GetFullPath(u"linked-image.jpg");
pictureFrame->get_PictureFormat()->get_Picture()->set_LinkPathLong(linkPath);
presentation->Save(u"linked-image.pptx", SaveFormat::Pptx);
presentation->Dispose();
ใช้ลิงก์เมื่อการจัดการไฟล์ภายนอกเป็นที่ตั้งใจ อย่าใช้ลิงก์เป็นวิธีทดแทนการบีบอัด: PPTX ขนาดเล็กที่มีการพึ่งพาภาพเสียหายมักจะใช้งานได้น้อยกว่างานนำเสนอที่มีขนาดใหญ่และเป็นอิสระ
ดึงภาพจากกรอบรูปภาพ
ก่อนดึงภาพจากงานนำเสนอที่มีอยู่, ตรวจสอบว่ารูปร่างเป็น IPictureFrame จริงและมีภาพที่ฝังอยู่หรือไม่ กรอบรูปภาพที่เชื่อมโยงอาจไม่มีไบต์ของภาพที่สามารถดึงได้ในลักษณะเดียวกัน
ดึงภาพเรสเซอร์
API ภาพสมัยใหม่ใช้ IImage โดยตรง ตัวอย่างต่อไปนี้ค้นหารูปเรสเซอร์ที่ฝังแรกบนสไลด์และบันทึกเป็น PNG:
#include <DOM/IPPImage.h>
#include <DOM/IPictureFillFormat.h>
#include <DOM/IPictureFrame.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/ISlidesPicture.h>
#include <DOM/Presentation.h>
#include <IImage.h>
#include <ImageFormat.h>
#include <system/object_ext.h>
using namespace Aspose::Slides;
using namespace System;
auto presentation = MakeObject<Presentation>(u"sample.pptx");
auto slide = presentation->get_Slide(0);
for (auto&& shape : slide->get_Shapes())
{
if (!ObjectExt::Is<IPictureFrame>(shape))
{
continue;
}
auto pictureFrame = ExplicitCast<IPictureFrame>(shape);
auto embeddedImage = pictureFrame->get_PictureFormat()->get_Picture()->get_Image();
if (embeddedImage == nullptr || embeddedImage->get_SvgImage() != nullptr)
{
continue;
}
auto rasterImage = embeddedImage->get_Image();
rasterImage->Save(u"extracted-image.png", ImageFormat::Png);
break;
}
presentation->Dispose();
การบันทึกผ่าน IImage จะเปลี่ยนภาพที่สกัดเป็นรูปแบบเอาต์พุตที่ร้องขอ หากต้องการไบต์ที่เข้ารหัสที่เก็บในงานนำเสนอแทนไฟล์เรสเซอร์ที่แปลงแล้ว, ให้ใช้ข้อมูลไบนารีของทรัพยากรภาพแทน
ดึงภาพ SVG
สำหรับรูป SVG, IPPImage เปิดเผยอ็อบเจกต์ ISvgImage. สิ่งนี้ทำให้คุณดึงข้อมูล SVG โดยตรงแทนการเรสเตอร์ไอจีแรก
#include <DOM/IPPImage.h>
#include <DOM/IPictureFillFormat.h>
#include <DOM/IPictureFrame.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/ISlidesPicture.h>
#include <DOM/ISvgImage.h>
#include <DOM/Presentation.h>
#include <system/io/file.h>
#include <system/object_ext.h>
using namespace Aspose::Slides;
using namespace System;
using namespace System::IO;
auto presentation = MakeObject<Presentation>(u"sample.pptx");
auto slide = presentation->get_Slide(0);
for (auto&& shape : slide->get_Shapes())
{
if (!ObjectExt::Is<IPictureFrame>(shape))
{
continue;
}
auto pictureFrame = ExplicitCast<IPictureFrame>(shape);
auto embeddedImage = pictureFrame->get_PictureFormat()->get_Picture()->get_Image();
if (embeddedImage == nullptr)
{
continue;
}
auto svgImage = embeddedImage->get_SvgImage();
if (svgImage == nullptr)
{
continue;
}
File::WriteAllBytes(u"extracted-image.svg", svgImage->get_SvgData());
break;
}
presentation->Dispose();
การเก็บเนื้อหา SVG เป็น SVG คงรักษาเวกเตอร์ต้นฉบับภายในงานนำเสนอ การส่งออกเป็นเรสเซอร์เช่น PNG หรือ JPEG จะต้องแปลงเวกเตอร์เป็นพิกเซล การส่งออกสไลด์เป็น PDF หรือ SVG ก็เป็นการเรนเดอร์เช่นกัน ดังนั้นกราฟิกที่ส่งออกไม่ควรถือว่าเป็นสำเนาไบต์ต่อไบต์ของ SVG ที่ฝังไว้; ควรใช้ข้อมูล ISvgImage ที่ฝังเมื่อจำเป็นต้องใช้ทรัพยากรเวกเตอร์ดั้งเดิม
ครอบภาพ
การครอบเปลี่ยนส่วนที่มองเห็นของภาพภายในกรอบ ค่า crop บน IPictureFillFormat เป็นเปอร์เซ็นต์ของมิติภาพต้นฉบับ การครอบไม่ได้ลบพิกเซลที่ซ่อนอยู่จากภาพที่ฝัง; มันเพียงเปลี่ยนพื้นที่ที่มองเห็น
ตัวอย่างต่อไปนี้ค้นหากรอบรูปภาพอย่างปลอดภัยและใช้ค่า crop:
#include <DOM/IPictureFillFormat.h>
#include <DOM/IPictureFrame.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <Export/SaveFormat.h>
#include <system/object_ext.h>
#include <system/smart_ptr.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
auto presentation = MakeObject<Presentation>(u"sample.pptx");
auto slide = presentation->get_Slide(0);
SharedPtr<IPictureFrame> pictureFrame;
for (auto&& shape : slide->get_Shapes())
{
if (ObjectExt::Is<IPictureFrame>(shape))
{
pictureFrame = ExplicitCast<IPictureFrame>(shape);
break;
}
}
if (pictureFrame != nullptr)
{
pictureFrame->get_PictureFormat()->set_CropLeft(23.6f);
pictureFrame->get_PictureFormat()->set_CropRight(21.5f);
pictureFrame->get_PictureFormat()->set_CropTop(3.0f);
pictureFrame->get_PictureFormat()->set_CropBottom(31.0f);
presentation->Save(u"cropped-image.pptx", SaveFormat::Pptx);
}
presentation->Dispose();
เนื่องจากข้อมูลภาพที่ซ่อนอยู่ยังคงอยู่, สามารถเปลี่ยนการครอบภายหลังโดยไม่สูญเสียพิกเซลเดิม หากขนาดไฟล์เป็นปัจจัยสำคัญมากกว่าการสามารถย้อนกลับ, สามารถลบพื้นที่ที่ครอบจริง ๆ ตามที่อธิบายในส่วนต่อไป
ลบข้อมูลภาพที่ถูกครอบ
IPictureFillFormat::DeletePictureCroppedAreas จะลบข้อมูลภาพที่อยู่นอกสี่เหลี่ยมครอบปัจจุบันและคืนทรัพยากรภาพที่ได้ ผลลัพธ์นี้สามารถลดขนาดไฟล์ได้ แต่เป็นการเพิ่มประสิทธิภาพแบบทำลาย: หลังจากบันทึกงานนำเสนอแล้ว พิกเซลที่ถูกลบจะไม่มีให้ทำการยกเลิกครอบได้อีก
#include <DOM/IPPImage.h>
#include <DOM/IPictureFillFormat.h>
#include <DOM/IPictureFrame.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <Export/SaveFormat.h>
#include <system/object_ext.h>
#include <system/smart_ptr.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
auto presentation = MakeObject<Presentation>(u"cropped-image.pptx");
auto slide = presentation->get_Slide(0);
SharedPtr<IPictureFrame> pictureFrame;
for (auto&& shape : slide->get_Shapes())
{
if (ObjectExt::Is<IPictureFrame>(shape))
{
pictureFrame = ExplicitCast<IPictureFrame>(shape);
break;
}
}
if (pictureFrame != nullptr)
{
auto croppedImage = pictureFrame->get_PictureFormat()->DeletePictureCroppedAreas();
if (croppedImage != nullptr)
{
presentation->Save(u"cropped-data-removed.pptx", SaveFormat::Pptx);
}
}
presentation->Dispose();
เมธอดนี้อาจเพิ่มทรัพยากรภาพใหม่ลงในงานนำเสนอ หากภาพต้นฉบับยังถูกใช้โดยกรอบรูปภาพอื่น, กรอบเหล่านั้นยังคงต้องการทรัพยากรเดิม ดังนั้นการลบพื้นที่ที่ครอบไม่ได้จะแน่นอนว่าจะลดจำนวนภาพทั้งหมด การครอบ WMF หรือ EMF ด้วยเมธอดนี้จะทำให้ผลลัพธ์ที่ครอบถูกเรสเตอร์เป็น PNG
บีบอัดภาพเรสเซอร์
IPictureFillFormat::CompressImage ลดความละเอียดของภาพเรสเซอร์สัมพันธ์กับขนาดที่ภาพแสดง สามารถลบพื้นที่ที่ครอบในขั้นตอนเดียวได้ เมธอดจะคืนค่า true เมื่อภาพถูกปรับขนาดหรือครอบและ false เมื่อไม่มีการเปลี่ยนแปลงใด ๆ
ใช้ค่า PicturesCompression ที่กำหนดไว้ล่วงหน้าเมื่อความละเอียดเป้าหมายมาตรฐานเพียงพอ:
#include <DOM/IPictureFillFormat.h>
#include <DOM/IPictureFrame.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <Export/PicturesCompression.h>
#include <Export/SaveFormat.h>
#include <system/console.h>
#include <system/object_ext.h>
#include <system/smart_ptr.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
auto presentation = MakeObject<Presentation>(u"sample.pptx");
auto slide = presentation->get_Slide(0);
SharedPtr<IPictureFrame> pictureFrame;
for (auto&& shape : slide->get_Shapes())
{
if (ObjectExt::Is<IPictureFrame>(shape))
{
pictureFrame = ExplicitCast<IPictureFrame>(shape);
break;
}
}
if (pictureFrame != nullptr)
{
auto compressed = pictureFrame->get_PictureFormat()->CompressImage(true, PicturesCompression::Dpi150);
Console::WriteLine(compressed ? String(u"The image was compressed.") : String(u"No compression was necessary."));
presentation->Save(u"compressed-image.pptx", SaveFormat::Pptx);
}
presentation->Dispose();
สามารถส่งค่า DPI เชิงบวกที่กำหนดเองแทนค่า enum เมื่อจำเป็นต้องมีเป้าหมายเฉพาะ
การบีบอัดมุ่งเน้นที่ภาพเรสเซอร์; เนื้อหา SVG และเมทาฟายล์จะไม่ถูกลดลงด้วยกระบวนการบีบอัดนี้ จำไว้ว่า ความละเอียดต่ำและการลบพื้นที่ที่ครอบไม่สามารถกู้คืนจากงานนำเสนอที่ถูกเพิ่มประสิทธิภาพได้ เลือกความละเอียดเป้าหมายตามขนาดที่ใหญ่ที่สุดที่ภาพจะถูกดูหรือส่งออกจริง ๆ แทนการใช้ DPI ต่ำสุดทั่วทั้งงานนำเสนอ
จัดการเอฟเฟกต์การแปลงรูปภาพ
สำหรับเวิร์กโฟลว์ครบถ้วนที่ครอบคลุมการปรับความสว่าง, คอนทราสต์, การแปลงสี, เบลอ, เอฟเฟกต์อัลฟ่า, เชนที่จัดลำดับ, การตรวจสอบ, การลบ, และการตรวจสอบการย้อนกลับ, ดู Image Transform Effects
ล็อกเรดิยายของกรอบรูปภาพ
การตั้งค่า IPictureFrameLock ควบคุมการปิดการทำงานของการแก้ไขบางอย่างสำหรับกรอบรูปภาพ ตัวอย่างเช่น aspect-ratio lock จะคงอัตราส่วนของรูปร่างขณะปรับขนาด
#include <DOM/IImageCollection.h>
#include <DOM/IPPImage.h>
#include <DOM/IPictureFrame.h>
#include <DOM/IPictureFrameLock.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <DOM/ShapeType.h>
#include <Export/SaveFormat.h>
#include <IImage.h>
#include <Util/Images.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
auto presentation = MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto sourceImage = Images::FromFile(u"photo.jpg");
auto image = presentation->get_Images()->AddImage(sourceImage);
auto pictureFrame = slide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 50, 100, image->get_Width(), image->get_Height(), image);
pictureFrame->get_PictureFrameLock()->set_AspectRatioLocked(true);
presentation->Save(u"locked-picture-frame.pptx", SaveFormat::Pptx);
presentation->Dispose();
การล็อกนี้ใช้กับรูปร่างกรอบรูปภาพ ไม่ได้บังคับให้ภาพต้นฉบับต้องรีแซมพลล์หรือเปลี่ยนอัตราส่วนถาวร
ปรับค่าการยืด StretchOffset
เมื่อโหมดเติมรูปภาพเป็น stretch, ค่า stretch‑offset บน IPictureFillFormat จะกำหนดสี่เหลี่ยมเติมสัมพันธ์กับกล่องขอบกรอบรูปภาพ เปอร์เซ็นต์บวกสร้างการเว้นจากขอบ, ส่วนเปอร์เซ็นต์ลบสร้างการขยายออก
นี่ต่างจากการครอบ ค่าครอบเลือกส่วนของภาพต้นฉบับที่มองเห็น; ส่วน stretch‑offset เปลี่ยนสี่เหลี่ยมที่ภาพเติมจะถูกยืดเข้าไป
#include <DOM/IImageCollection.h>
#include <DOM/IPPImage.h>
#include <DOM/IPictureFillFormat.h>
#include <DOM/IPictureFrame.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/PictureFillMode.h>
#include <DOM/Presentation.h>
#include <DOM/ShapeType.h>
#include <Export/SaveFormat.h>
#include <IImage.h>
#include <Util/Images.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
auto presentation = MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto sourceImage = Images::FromFile(u"photo.png");
auto image = presentation->get_Images()->AddImage(sourceImage);
auto pictureFrame = slide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 10, 10, 400, 300, image);
pictureFrame->get_PictureFormat()->set_PictureFillMode(PictureFillMode::Stretch);
pictureFrame->get_PictureFormat()->set_StretchOffsetLeft(12.0f);
pictureFrame->get_PictureFormat()->set_StretchOffsetRight(12.0f);
pictureFrame->get_PictureFormat()->set_StretchOffsetTop(8.0f);
pictureFrame->get_PictureFormat()->set_StretchOffsetBottom(8.0f);
presentation->Save(u"stretch-offsets.pptx", SaveFormat::Pptx);
presentation->Dispose();
ใช้ stretch‑offset สำหรับการวางตำแหน่งเติม ใช้คุณสมบัติเครอบเมื่อเป้าหมายคือการซ่อนขอบของภาพต้นฉบับ
การจัดเก็บ, ขนาดไฟล์, และข้อพิจารณาการส่งออก
ข้อแลกเปลี่ยนหลักจัดการได้ง่ายขึ้นเมื่อการจัดเก็บภาพและการฟอร์แมตกรอบรูปภาพแยกกัน:
- Embedded images ทำให้งานนำเสนอเป็นอิสระและเป็นทางเลือกที่เชื่อถือได้ที่สุดสำหรับการแชร์และการแสดงผลฝั่งเซิร์ฟเวอร์, แต่ภาพเรสเซอร์ขนาดใหญ่จะเพิ่มขนาด PPTX และการใช้หน่วยความจำ
- Linked images สามารถทำให้แพ็กเกจมีขนาดเล็กลง, แต่การนำเสนอจะพึ่งพาไฟล์ภายนอกที่ต้องคงอยู่ที่พาธหรือที่ตั้งที่เก็บไว้
- Cropping เริ่มต้นเป็นแบบไม่ทำลาย; พิกเซลที่ซ่อนอยู่ยังคงฝังอยู่จนกว่าจะลบพื้นที่ที่ครอบอย่างชัดเจนหรือระหว่างการบีบอัด
- Compression สามารถลดขนาดไฟล์ได้อย่างมีนัยสำคัญสำหรับภาพเรสเซอร์ที่ใหญ่เกินไป, แต่จะสูญเสียความละเอียดต้นฉบับ ควรทำหลังจากทราบขนาดที่จะแสดงบนสไลด์แล้ว
- SVG images ควรคงเป็น SVG เมื่อการรักษาเวกเตอร์สำคัญ; ดึง SVG ที่ฝังโดยตรงเมื่อต้องการทรัพยากรเวกเตอร์เอง การส่งออกสไลด์เป็นเรสเซอร์จะเปลี่ยนสไลด์ที่เรนเดอร์เป็นพิกเซลเสมอ
- Repeated images ควรใช้ทรัพยากร IPPImage ที่มีอยู่แล้วเมื่อเป็นไปได้ แทนการโหลดไฟล์เดียวกันหลายครั้งเข้าสู่วเวิร์กโฟลว์งานนำเสนอ
สำหรับงานนำเสนอขนาดใหญ่, การเพิ่มประสิทธิภาพภาพมักจะได้ผลดีที่สุดเมื่อทำอย่างเลือกสรร: เก็บโลโก้และไดอะแกรมเป็นเนื้อหาเวกเตอร์, บีบอัดภาพถ่ายตามขนาดการแสดงจริง, ลบพิกเซลที่ครอบเฉพาะเมื่อไม่ต้องการแก้ไขต่อภายหลัง, และหลีกเลี่ยงลิงก์ภายนอกเว้นแต่การจัดการการพึ่งพาจะเป็นส่วนหนึ่งของการออกแบบการปรับใช้
คำถามที่พบบ่อย
ภาพกรอบรูปภาพและทรัพยากรภาพต่างกันอย่างไร?
IPPImage เป็นทรัพยากรภาพที่เชื่อมโยงกับงานนำเสนอ ส่วน IPictureFrame เป็นรูปร่างบนสไลด์ที่แสดงภาพและเก็บเรดิยายระดับกรอบและการจัดรูปแบบเช่น ขนาด, การหมุน, ค่า crop, เอฟเฟกต์, และการล็อก
ควรฝังหรือเชื่อมโยงภาพ?
ควรฝังภาพเมื่อจำเป็นต้องให้งานนำเสนอพกพา, เก็บถาวร, หรือแสดงผลโดยไม่ต้องพึ่งพาทรัพยากรภายนอก เชื่อมโยงภาพเฉพาะเมื่อตั้งใจให้ไฟล์ภาพอยู่นอก PPTX และสามารถรักษาตำแหน่งไฟล์ภายนอกได้อย่างเชื่อถือได้
การครอบลดขนาดไฟล์ PPTX หรือไม่?
ไม่โดยตรง การตั้งค่าครอบปกติจะซ่อนส่วนของภาพต้นฉบับแต่ยังคงเก็บพิกเซลไว้ ใช้ IPictureFillFormat::DeletePictureCroppedAreas หรือการบีบอัดภาพพร้อมการลบพื้นที่ที่ครอบเมื่อพิกเซลเหล่านั้นสามารถละทิ้งได้อย่างถาวร
สามารถฟื้นฟูคุณภาพภาพหลังบีบอัดได้หรือไม่?
ไม่ได้ การบีบอัดอาจลดความละเอียดเรสเซอร์ที่จัดเก็บและการลบพื้นที่ที่ครอบจะทำให้ข้อมูลภาพหายไป หากอาจต้องการการแก้ไขความละเอียดสูงในภายหลัง ควรเก็บภาพต้นฉบับนอกงานนำเสนอ
ควรจัดการภาพ SVG อย่างไร?
เก็บเนื้อหา SVG เป็น SVG เมื่อความเที่ยงตรงของเวกเตอร์สำคัญ สามารถดึง ISvgImage ที่ฝังโดยตรง การเรนเดอร์สไลด์เป็นรูปแบบเรสเซอร์เช่น PNG หรือ JPEG จะทำให้เวกเตอร์แปลงเป็นพิกเซล
จะหลีกเลี่ยงการ cast ที่ไม่ปลอดภัยเมื่ออ่านสไลด์ที่มีอยู่ได้อย่างไร?
ตรวจสอบประเภทของรูปร่างก่อนใช้สมาชิกเฉพาะกรอบรูปภาพ ทดสอบรูปร่างด้วย IPictureFrame ก่อนทำการ cast runtime และเก็บผลลัพธ์ของ cast ไว้ในตัวแปรท้องถิ่นก่อนเข้าถึงสมาชิกที่เฉพาะเจาะจงของกรอบรูปภาพ