C++ का उपयोग करके प्रस्तुतियों में छवि प्रबंधन को अनुकूलित करें
परिचय
Aspose.Slides for C++ कई तरीकों से छवियों के साथ काम करने की सुविधा देता है, और प्रत्येक का अलग उद्देश्य है। आप एक छवि को प्रस्तुति में संग्रहीत कर सकते हैं, उसे चित्र फ्रेम में प्रदर्शित कर सकते हैं, स्लाइड बैकग्राउंड के रूप में उपयोग कर सकते हैं, बाहरी छवि का लिंक बना सकते हैं, साझा छवि संसाधन को बदल सकते हैं, या SVG सामग्री को संपादनीय आकृतियों में बदल सकते हैं।
यह लेख छवि संसाधनों और उनकी प्रस्तुति में उपयोग पर केंद्रित है। चित्र फ्रेम पर लागू क्रॉपिंग, ट्रांसपरेंसी, इफ़ेक्ट्स, स्ट्रेचिंग और अन्य फ़ॉर्मेटिंग के लिए देखें चित्र फ्रेम।
छवि मॉडल को समझें
- The प्रस्तुति छवि संग्रह प्रस्तुति द्वारा उपयोग किए गए छवि संसाधनों को संग्रहीत करता है। Use IImageCollection::AddImage to add image data and obtain an IPPImage resource.
- A चित्र फ्रेम एक आकार है जो स्लाइड, लेआउट, या मास्टर पर छवि प्रदर्शित करता है। Use IShapeCollection::AddPictureFrame to place an image resource on a slide.
- A slide background uses an image as part of the slide fill rather than as a shape. It therefore does not behave like a picture frame.
- IPPImage::ReplaceImage छवि संसाधन को बदलता है। यदि कई प्रस्तुति तत्व उसी संसाधन का उपयोग करते हैं, तो वे सभी प्रतिस्थापन का उपयोग करेंगे।
- Converting an SVG to shapes creates editable slide shapes. After conversion, the content is no longer managed as one picture resource.
एक सामान्य कार्य‑प्रवाह इस प्रकार है: छवि डेटा को छवि संग्रह में जोड़ें, एक IPPImage प्राप्त करें, और फिर उस संसाधन का उपयोग एक या अधिक चित्र फ्रेम या फ़िल में करें।
संलग्न छवि जोड़ें
स्थानीय छवि को सम्मिलित करने के लिए फ़ाइल को पढ़ें, उसका डेटा छवि संग्रह में जोड़ें, और एक चित्र फ्रेम बनाएं जो लौटाए गए IPPImage संसाधन का उपयोग करता है।
#include <DOM/IImageCollection.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <DOM/ShapeType.h>
#include <Export/SaveFormat.h>
#include <system/io/file.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
using namespace System::IO;
auto presentation = MakeObject<Presentation>();
auto imageData = File::ReadAllBytes(u"photo.png");
auto image = presentation->get_Images()->AddImage(imageData);
auto slide = presentation->get_Slide(0);
slide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 20.0f, 20.0f, 320.0f, 180.0f, image);
presentation->Save(u"presentation.pptx", SaveFormat::Pptx);
presentation->Dispose();
इस प्रकार जोड़ी गई छवि प्रस्तुति में एम्बेडेड रहती है, इसलिए परिणामी फ़ाइल को मूल छवि फ़ाइल की उपलब्धता पर निर्भर नहीं होना चाहिए।
वेब से छवि जोड़ें
जब कोई छवि HTTP या HTTPS के माध्यम से उपलब्ध हो, तो उसके बाइट्स डाउनलोड करें, उन्हें प्रस्तुति छवि संग्रह में जोड़ें, और लौटाए गए छवि संसाधन का उसी तरह उपयोग करें जैसा आप स्थानीय छवि के लिए करते हैं।
#include <DOM/IImageCollection.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <DOM/ShapeType.h>
#include <Export/SaveFormat.h>
#include <net/web_client.h>
#include <system/uri.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
using namespace System::Net;
auto imageUri = MakeObject<Uri>(u"https://example.com/image.png");
auto webClient = MakeObject<WebClient>();
auto imageData = webClient->DownloadData(imageUri);
auto presentation = MakeObject<Presentation>();
auto image = presentation->get_Images()->AddImage(imageData);
auto slide = presentation->get_Slide(0);
slide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 20.0f, 20.0f, 320.0f, 180.0f, image);
presentation->Save(u"presentation-from-web.pptx", SaveFormat::Pptx);
presentation->Dispose();
रिमोट URLs, प्रतिक्रिया आकार, और सामग्री प्रकार को सत्यापित करें जब स्रोत भरोसेमंद न हो। उन अनुप्रयोगों में जो पहले से किसी अन्य HTTP क्लाइंट का उपयोग करते हैं, आप उस क्लाइंट से छवि डाउनलोड कर सकते हैं और परिणत बाइट्स या स्ट्रीम को IImageCollection::AddImage को पास कर सकते हैं।
स्लाइड्स में छवियों का पुन: उपयोग
यदि एक ही छवि कई बार चाहिए, तो उसे प्रस्तुति में एक बार जोड़ें और अतिरिक्त चित्र फ्रेम बनाते समय लौटाए गए IPPImage का पुन: उपयोग करें। इससे एक ही स्रोत डेटा को बार‑बार लोड करने की आवश्यकता नहीं रहती और साझा छवि संसाधन एवं उसके उपयोग के बीच स्पष्ट संबंध बनता है।
उन ग्राफ़िक्स के लिए जो कई स्लाइड्स पर स्वचालित रूप से दिखने चाहिए, जैसे कंपनी का लोगो, प्रत्येक स्लाइड में समान आकार जोड़ने के बजाय स्लाइड मास्टर या लेआउट पर चित्र फ्रेम रखने पर विचार करें।
छवि को स्लाइड बैकग्राउंड के रूप में उपयोग करें
बैकग्राउंड छवि स्लाइड फ़िल में निर्धारित की जाती है; यह चित्र‑फ़्रेम आकार के रूप में नहीं जोड़ी जाती। यह उपयोगी है जब चित्र को स्लाइड बैकग्राउंड पर पूरी तरह से कवर करना हो और उसे सामान्य स्लाइड वस्तु की तरह संशोधित नहीं किया जाना चाहिए।
#include <DOM/BackgroundType.h>
#include <DOM/FillType.h>
#include <DOM/IBackground.h>
#include <DOM/IFillFormat.h>
#include <DOM/IImageCollection.h>
#include <DOM/IPictureFillFormat.h>
#include <DOM/ISlide.h>
#include <DOM/ISlidesPicture.h>
#include <DOM/PictureFillMode.h>
#include <DOM/Presentation.h>
#include <Export/SaveFormat.h>
#include <system/io/file.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 imageData = File::ReadAllBytes(u"background.jpg");
auto image = presentation->get_Images()->AddImage(imageData);
slide->get_Background()->set_Type(BackgroundType::OwnBackground);
slide->get_Background()->get_FillFormat()->set_FillType(FillType::Picture);
slide->get_Background()->get_FillFormat()->get_PictureFillFormat()->set_PictureFillMode(PictureFillMode::Stretch);
slide->get_Background()->get_FillFormat()->get_PictureFillFormat()->get_Picture()->set_Image(image);
presentation->Save(u"background-image.pptx", SaveFormat::Pptx);
presentation->Dispose();
अतिरिक्त बैकग्राउंड विकल्पों के लिए, जिसमें मास्टर और लेआउट बैकग्राउंड शामिल हैं, देखें प्रस्तुति पृष्ठभूमि।
संलग्न छवियां और लिंक्ड छवियां
संलग्न और लिंक्ड छवियों में पोर्टेबिलिटी और फ़ाइल‑आकार के अलग‑अलग समझौते होते हैं:
- संलग्न छवि: छवि डेटा प्रस्तुति के भीतर संग्रहित होता है। प्रस्तुति स्वयं‑समाहित होती है, लेकिन फ़ाइल आकार में छवि डेटा शामिल होता है।
- लिंक्ड छवि: प्रस्तुति बाहरी छवि के पथ या URL को संग्रहित करती है। इससे प्रस्तुति आकार घट सकता है, लेकिन बाहरी संसाधन को खोलते या रेंडर करते समय उपलब्ध होना चाहिए।
एक लिंक्ड चित्र को ISlidesPicture::set_LinkPathLong के माध्यम से बाहरी पथ या URL असाइन करके बनाया जा सकता है, बजाय छवि डेटा को एम्बेड करने के।
#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>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
auto presentation = MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto pictureFrame = slide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 20.0f, 20.0f, 320.0f, 180.0f, nullptr);
pictureFrame->get_PictureFormat()->get_Picture()->set_LinkPathLong(u"https://example.com/image.png");
presentation->Save(u"linked-image.pptx", SaveFormat::Pptx);
presentation->Dispose();
लिंक्ड छवियों का उपयोग केवल तब करें जब परिनियोजन वातावरण बाहरी संसाधन तक विश्वसनीय रूप से पहुंच सके। उन प्रस्तुतियों के लिए जो ऑफ़लाइन काम करनी हों या सिस्टमों के बीच ले जानी हों, संलग्न छवियां आमतौर पर सुरक्षित रहती हैं।
SVG छवियों के साथ काम करें
SVG एक वेक्टर फ़ॉर्मेट है, इसलिए यह आइकन, आरेख, और अन्य ग्राफ़िक्स के लिए उपयोगी हो सकता है जो रास्टर छवियों की तरह विवरण खोए बिना स्केल हो सकें। Aspose.Slides SVG को दोनों – एक छवि संसाधन के रूप में और संपादनीय स्लाइड आकृतियों के स्रोत के रूप में – समर्थन देता है।
SVG को छवि के रूप में जोड़ें
एक SvgImage बनाएं, इसे छवि संग्रह में जोड़ें, और परिणामस्वरूप छवि संसाधन को एक चित्र फ्रेम में रखें।
#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/file.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
using namespace System::IO;
auto svgContent = File::ReadAllText(u"icon.svg");
auto svgImage = MakeObject<SvgImage>(svgContent);
auto presentation = MakeObject<Presentation>();
auto image = presentation->get_Images()->AddImage(svgImage);
auto slide = presentation->get_Slide(0);
slide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 20.0f, 20.0f, 200.0f, 200.0f, image);
presentation->Save(u"svg-image.pptx", SaveFormat::Pptx);
presentation->Dispose();
बाहरी संसाधनों वाले SVG फ़ाइलें
एक SVG बाहरी छवियों, स्टाइलशीट या फ़ॉन्ट्स को संदर्भित कर सकता है। ऐसे मामलों के लिए, SvgImage ऐसे कंस्ट्रक्टर्स प्रदान करता है जो एक IExternalResourceResolver और एक बेस URI को स्वीकार करते हैं। रिजॉल्वर एक सापेक्ष URI को अनुमत पूर्ण URI में मानचित्रित कर सकता है और अनुरोधित संसाधन के लिए एक स्ट्रीम लौटाता है।
रिजॉल्वर SVG को प्रोसेस करते समय बाहरी संसाधनों को उपलब्ध कराता है, लेकिन यह SVG को स्वयं‑समाहित दस्तावेज़ में नहीं लिखता। यदि SVG को पोर्टेबल रहना आवश्यक है, तो आवश्यक संसाधनों को स्वयं SVG में एम्बेड करें, उदाहरण के लिए लिंक्ड छवियों के लिए data: URI का उपयोग करके।
जब SVG फ़ाइलें अविश्वसनीय स्रोतों से आती हैं, तो रिजॉल्वर द्वारा एक्सेस किए जा सकने वाले स्कीम, फ़ाइल स्थान, और होस्ट को प्रतिबंधित करें। नेटवर्क रिजॉल्वर को टाइम‑आउट, प्रतिक्रिया‑आकार सीमाएँ, और सामग्री सत्यापन भी लागू करना चाहिए।
SVG को संपादनीय आकृतियों में बदलें
Aspose.Slides एक SVG को संपादनीय स्लाइड आकृतियों के समूह में बदल सकता है, जो संबंधित PowerPoint कमांड के समान है।

परिवर्तन करने के लिए वह IShapeCollection::AddGroupShape ओवरलोड उपयोग करें जो एक ISvgImage को स्वीकार करता है।
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/ISlideSize.h>
#include <DOM/Presentation.h>
#include <DOM/SvgImage.h>
#include <Export/SaveFormat.h>
#include <system/io/file.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
using namespace System::IO;
auto svgContent = File::ReadAllText(u"diagram.svg");
auto svgImage = MakeObject<SvgImage>(svgContent);
auto presentation = MakeObject<Presentation>();
auto slideSize = presentation->get_SlideSize()->get_Size();
auto slide = presentation->get_Slide(0);
slide->get_Shapes()->AddGroupShape(svgImage, 0.0f, 0.0f, slideSize.get_Width(), slideSize.get_Height());
presentation->Save(u"editable-svg-shapes.pptx", SaveFormat::Pptx);
presentation->Dispose();
जब व्यक्तिगत वेक्टर तत्वों को PowerPoint आकृतियों के रूप में संपादित करने की आवश्यकता हो तो SVG‑से‑आकृति रूपांतरण का उपयोग करें। यदि SVG को केवल प्रदर्शित करना है, तो उसे छवि के रूप में रखना सरल है और कई अलग‑अलग आकृतियों के निर्माण से बचाता है।
मौजूदा छवि संसाधन को बदलें
जब आप किसी मौजूदा छवि संसाधन को बदलना चाहते हों, तो IPPImage::ReplaceImage का उपयोग करें। यह विशेष रूप से साझा ग्राफ़िक्स जैसे लोगो के लिए उपयोगी है।
#include <DOM/IPPImage.h>
#include <DOM/Presentation.h>
#include <Export/SaveFormat.h>
#include <system/io/file.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
using namespace System::IO;
auto presentation = MakeObject<Presentation>(u"input.pptx");
auto imageToReplace = presentation->get_Image(0);
auto imageData = File::ReadAllBytes(u"new-logo.png");
imageToReplace->ReplaceImage(imageData);
presentation->Save(u"output.pptx", SaveFormat::Pptx);
presentation->Dispose();
यदि कई चित्र फ्रेम, बैकग्राउंड, मास्टर या लेआउट एक ही छवि संसाधन का उपयोग करते हैं, तो उस संसाधन को बदलने से उन सभी उपयोगों में अद्यतन हो जाएगा। यदि केवल एक चित्र फ्रेम बदलना है, तो साझा संसाधन को बदलने के बजाय उस फ्रेम को कोई अलग छवि असाइन करें।
IPPImage::ReplaceImage अतिरिक्त ओवरलोड भी प्रदान करता है जो एक IImage या किसी अन्य IPPImage को स्वीकार करता है।
व्यावहारिक छवि प्रबंधन मार्गदर्शन
प्रस्तुति आकार को नियंत्रित करें
बड़े रास्टर चित्र प्रस्तुति को अनावश्यक रूप से बड़ा बना सकते हैं। स्रोत छवियों को उस आकार के अनुसार चुनें जो उनके इरादे के प्रदर्शन आकार के अनुकूल हो, जहाँ संभव हो साझा छवि संसाधनों को पुनः उपयोग करें, और समान पूर्ण‑रिज़ॉल्यूशन ग्राफ़िक की कई प्रतियों को एम्बेड करने से बचें।
पहले से चित्र फ्रेम में रखी गई रास्टर छवियों के लिए, IPictureFillFormat::CompressImage चयनित रिज़ॉल्यूशन और क्रॉप सेटिंग्स के अनुसार छवि डेटा को घटा सकता है। यह चित्र‑फ़्रेम प्रोसेसिंग है, न कि छवि‑संग्रह प्रबंधन, इसलिए संबंधित फ़ॉर्मेटिंग संचालन के लिए देखें चित्र फ्रेम।
संलग्न और लिंक्ड सामग्री के बीच चयन करें
एंबेडिंग प्रस्तुति को पोर्टेबल बनाता है क्योंकि सभी आवश्यक छवि डेटा फ़ाइल के साथ रहता है। लिंकिंग फ़ाइल आकार को घटा सकता है, लेकिन यह एक बाहरी निर्भरता पेश करता है। लिंक केवल तभी उपयोग करें जब वह निर्भरता स्वीकार्य और स्थिर हो।
साझा ब्रांडिंग का पुन: उपयोग
दोहराए जाने वाले लोगो, वॉटरमार्क या सजावटी ग्राफ़िक्स के लिए एक ही छवि संसाधन का उपयोग करें और उसे पुनः उपयोग करें। यदि ग्राफ़िक प्रस्तुति डिज़ाइन का हिस्सा है न कि स्लाइड सामग्री, तो उसे मास्टर या लेआउट पर रखें ताकि उपयुक्त स्लाइड्स द्वारा विरासत में मिले।
SVG संसाधनों को पोर्टेबल रखें
एक स्वयं‑समाहित SVG हल्का और स्थिर रूप से रेंडर करने में आसान रहता है, तुलना में एक ऐसा SVG जो बाहरी फ़ाइलों या नेटवर्क संसाधनों पर निर्भर करता है। संभव हो तो SVG आयात करने से पहले आवश्यक संसाधनों को एम्बेड करें। केवल तब SVG को आकृतियों में बदलें जब व्यक्तिगत वेक्टर तत्वों को संपादित करने की आवश्यकता हो।
Aspose.Slides छवि API का उपयोग करें
C++ छवि वर्कफ़्लोज़ के लिए, जब आपको छवि ऑब्जेक्ट चाहिए तो Aspose.Slides के IImage और Images API का उपयोग करें, और जब आपको छवि डेटा को प्रस्तुति संसाधन के रूप में पंजीकृत करना हो तो IImageCollection::AddImage का उपयोग करें। संग्रह ओवरलोड बाइट एरे और स्ट्रीम का समर्थन भी करते हैं, जो फाइलों, नेटवर्क क्लाइंट्स, डेटाबेस या अन्य लाइब्रेरीज़ से आने वाले छवि डेटा के लिए उपयोगी हैं।
स्प्रेडशीट या अन्य उत्पाद से EMF सामग्री उत्पन्न करना एक अलग एकीकरण वर्कफ़्लो है और इस लेख के दायरे से बाहर है। यदि किसी मौजूदा WMF या EMF फ़ाइल को केवल प्रस्तुति में सम्मिलित करना है, तो उसे उपयुक्त IImageCollection::AddImage ओवरलोड को पास करें, बिना छवि‑प्रबंधन वर्कफ़्लो में दूसरे उत्पाद की निर्भरता जोड़े।
अक्सर पूछे जाने वाले प्रश्न
छवि संग्रह और चित्र फ्रेम के बीच क्या अंतर है?
छवि संग्रह पुन: उपयोग योग्य छवि संसाधनों को संग्रहीत करता है। चित्र फ्रेम एक स्लाइड आकार है जो उन संसाधनों में से एक को प्रदर्शित करता है और क्रॉपिंग, इफ़ेक्ट्स आदि जैसी चित्र‑विशिष्ट फ़ॉर्मेटिंग प्रदान करता है।
सभी जगह एक ही लोगो बदलने का सबसे अच्छा तरीका क्या है?
यदि लोगो पहले से एक छवि संसाधन के रूप में साझा किया गया है, तो उसे IPPImage::ReplaceImage से बदलें। संपूर्ण प्रस्तुति‑व्यापी ब्रांडिंग के लिए, लोगो को मास्टर या लेआउट पर रखने से दोहराए गए स्लाइड सामग्री की मात्रा भी घट सकती है।
क्यों एक लिंक्ड छवि दूसरे कंप्यूटर पर गायब हो जाती है?
लिंक्ड चित्र बाहरी फ़ाइल या URL पर निर्भर करता है। यदि वह संसाधन दूसरे कंप्यूटर से पहुँच योग्य नहीं है, तो लिंक्ड छवि उपलब्ध नहीं होगी। जब प्रस्तुति को स्वयं‑समाहित होना आवश्यक हो, तो छवि को एम्बेड करें।
क्या सम्मिलित SVG को PowerPoint आकृतियों के रूप में संपादित किया जा सकता है?
हाँ। SVG को IShapeCollection::AddGroupShape से बदलें; resulting group contains editable slide shapes rather than a single SVG picture.
मैं कई छवियों वाली प्रस्तुतियों को छोटा कैसे रख सकता हूँ?
साझा छवि संसाधनों का पुन: उपयोग करें, अनावश्यक बड़े रास्टर स्रोतों से बचें, उपयुक्त रास्टर चित्रों को कॉम्प्रेस करें, ब्रांडिंग को मास्टर या लेआउट पर रखें, और लिंक्ड छवियों का उपयोग केवल तब करें जब बाहरी निर्भरता स्वीकार्य हो।