आधुनिक API के साथ छवि प्रसंस्करण को उन्नत बनाएं
परिचय
ऐतिहासिक रूप से, Aspose Slides को System.Drawing पर निर्भरता है और सार्वजनिक API में वहां से निम्नलिखित क्लासें हैं:
संस्करण 24.4 से, इस सार्वजनिक API को अप्रचलित घोषित किया गया है।
चूंकि .NET6 और उसके ऊपर संस्करणों में System.Drawing समर्थन गैर‑Windows संस्करणों के लिए हटा दिया गया है (breaking change), Slides ने दो‑पैकेज दृष्टिकोण लागू किया है:
- Aspose.Slides.NET - समर्थन .NET6+ Windows के लिए, .NETStandard Windows/Linux/MacOS के लिए, .NETFramework 2+ (Windows)। - System.Drawing.Common पर निर्भरता है।
- Aspose.Slides.NET6.CrossPlatform - Windows/Linux/MacOS संस्करण बिना निर्भरताओं के।
Aspose.Slides.NET6.CrossPlatform की असुविधा यह है कि यह उसी नेमस्पेस में System.Drawing का अपना संस्करण लागू करता है (पब्लिक API की बैकवर्ड संगतता के लिए)। इसलिए, जब Aspose.Slides.NET6.CrossPlatform और .NET Framework या System.Drawing.Common पैकेज से System.Drawing एक साथ उपयोग किए जाते हैं, तो एलियास न उपयोग करने पर नाम टकराव होता है।
मुख्य Aspose.Slides.NET पैकेज में System.Drawing पर निर्भरताओं से छुटकारा पाने के लिए, हमने तथाकथित “आधुनिक API” जोड़ा है — अर्थात् वह API जिसे अप्रचलित वाले की जगह उपयोग किया जाना चाहिए, जिसकी सिग्नेचर में System.Drawing के निम्नलिखित प्रकार शामिल हैं: Image और Bitmap। PrinterSettings और Graphics को अप्रचलित घोषित किया गया है और उनके समर्थन को सार्वजनिक Slides API से हटा दिया गया है।
वर्तमान संस्करणों में, System.Drawing पर निर्भर सार्वजनिक API को लेगेसी/अप्रचलित मानें। नई कोड के लिए और मौजूदा इमेज‑प्रोसेसिंग कार्यप्रवाह को माइग्रेट करते समय आधुनिक API का उपयोग करें।
आधुनिक API
सार्वजनिक API में निम्नलिखित क्लास और एन्युम जोड़े गए हैं:
- Aspose.Slides.IImage - रास्टर या वेक्टर छवि को दर्शाता है।
- Aspose.Slides.ImageFormat - छवि के फ़ाइल स्वरूप को दर्शाता है।
- Aspose.Slides.Images - IImage इंटरफ़ेस को इंस्टैंशिएट करने और उसके साथ काम करने के मेथड।
कृपया ध्यान दें कि IImage डिस्पोज़ेबल है (यह IDisposable इंटरफ़ेस को इम्प्लीमेंट करता है और इसका उपयोग using ब्लॉक में या किसी अन्य सुविधाजनक तरीके से डिस्पोज़ किया जाना चाहिए)।
GetImage का उपयोग करके एकल स्लाइड या श shape को रेंडर करें। कई प्रेजेंटेशन स्लाइड्स को रेंडर करने के लिए GetImages का उपयोग करें। छवियों को लोड करने के लिए Images मेथड, प्रेजेंटेशन में जोड़ने के लिए AddImage के साथ [IImage] का प्रयोग, और मौजूदा प्रेजेंटेशन छवि को अपडेट करने के लिए ReplaceImage के साथ [IImage] का प्रयोग करें।
नया API उपयोग करने का एक सामान्य परिदृश्य इस प्रकार हो सकता है:
using (Presentation pres = new Presentation())
{
IPPImage ppImage;
// डिस्क पर फाइल से IImage का डिस्पोज़ेबल इंस्टेंस बनाएं।
using (IImage image = Images.FromFile("image.png"))
{
// प्रेजेंटेशन की इमेजेज में IImage का इंस्टेंस जोड़कर एक PowerPoint इमेज बनाएं।
ppImage = pres.Images.AddImage(image);
}
// स्लाइड #1 पर एक चित्र आकार जोड़ें।
pres.Slides[0].Shapes.AddPictureFrame(ShapeType.Rectangle, 10, 10, 100, 100, ppImage);
// स्लाइड #1 का प्रतिनिधित्व करने वाला IImage का इंस्टेंस प्राप्त करें।
using (var slideImage = pres.Slides[0].GetImage(new Size(1920, 1080)))
{
// इमेज को डिस्क पर सहेजें।
slideImage.Save("slide1.jpeg", ImageFormat.Jpeg);
}
}
पुराने कोड को आधुनिक API से बदलना
संक्रमण को आसान बनाने के लिए, नए IImage का इंटरफ़ेस Image और Bitmap क्लासों के अलग‑अलग सिग्नेचर को दोहराता है। सामान्यतः, आपको System.Drawing का उपयोग करने वाले पुराने मेथड को नए मेथड से बदलना होगा।
स्लाइड थंबनेल प्राप्त करना
लेगेसी/अप्रचलित API:
using (Presentation pres = new Presentation("pres.pptx"))
{
pres.Slides[0].GetThumbnail().Save("slide1.png");
}
आधुनिक API:
using (Presentation pres = new Presentation("pres.pptx"))
{
pres.Slides[0].GetImage().Save("slide1.png");
}
श shape थंबनेल प्राप्त करना
लेगेसी/अप्रचलित API:
using (Presentation pres = new Presentation("pres.pptx"))
{
pres.Slides[0].Shapes[0].GetThumbnail().Save("shape.png");
}
आधुनिक API:
using (Presentation pres = new Presentation("pres.pptx"))
{
pres.Slides[0].Shapes[0].GetImage().Save("shape.png");
}
प्रेजेंटेशन थंबनेल प्राप्त करना
लेगेसी/अप्रचलित API:
using (Presentation pres = new Presentation("pres.pptx"))
{
var bitmaps = pres.GetThumbnails(new RenderingOptions(), new Size(1980, 1028));
try
{
for (var index = 0; index < bitmaps.Length; index++)
{
Bitmap thumbnail = bitmaps[index];
thumbnail.Save($"slide{index}.png", ImageFormat.Png);
}
}
finally
{
foreach (Bitmap bitmap in bitmaps)
{
bitmap.Dispose();
}
}
}
आधुनिक API:
using (Presentation pres = new Presentation("pres.pptx"))
{
var images = pres.GetImages(new RenderingOptions(), new Size(1980, 1028));
try
{
for (var index = 0; index < images.Length; index++)
{
IImage thumbnail = images[index];
thumbnail.Save($"slide{index}.png", ImageFormat.Png);
}
}
finally
{
foreach (IImage image in images)
{
image.Dispose();
}
}
}
प्रेजेंटेशन में चित्र जोड़ना
लेगेसी/अप्रचलित API:
using (Presentation pres = new Presentation())
{
IPPImage ppImage;
using (Image image = Image.FromFile("image.png"))
{
ppImage = pres.Images.AddImage(image);
}
pres.Slides[0].Shapes.AddPictureFrame(ShapeType.Rectangle, 10, 10, 100, 100, ppImage);
}
आधुनिक API:
using (Presentation pres = new Presentation())
{
IPPImage ppImage;
using (IImage image = Aspose.Slides.Images.FromFile("image.png"))
{
ppImage = pres.Images.AddImage(image);
}
pres.Slides[0].Shapes.AddPictureFrame(ShapeType.Rectangle, 10, 10, 100, 100, ppImage);
}
अप्रचलित मेथड/प्रॉपर्टीज़ और उनका आधुनिक API में प्रतिस्थापन
Presentation
| मेथड सिग्नेचर | प्रतिस्थापन मेथड सिग्नेचर |
|---|---|
| public Bitmap[] GetThumbnails(IRenderingOptions options) | GetImages(IRenderingOptions options) |
| public Bitmap[] GetThumbnails(IRenderingOptions options, int[] slides) | GetImages(IRenderingOptions options, int[] slides) |
| public Bitmap[] GetThumbnails(IRenderingOptions options, float scaleX, float scaleY) | GetImages(IRenderingOptions options, float scaleX, float scaleY) |
| public Bitmap[] GetThumbnails(IRenderingOptions options, int[] slides, float scaleX, float scaleY) | GetImages(IRenderingOptions options, int[] slides, float scaleX, float scaleY) |
| public Bitmap[] GetThumbnails(IRenderingOptions options, Size imageSize) | GetImages(IRenderingOptions options, Size imageSize) |
| public Bitmap[] GetThumbnails(IRenderingOptions options, int[] slides, Size imageSize) | GetImages(IRenderingOptions options, int[] slides, Size imageSize) |
| public void Save(string fname, SaveFormat format, HttpResponse response, bool showInline) | No Modern API replacement |
| public void Save(string fname, SaveFormat format, ISaveOptions options, HttpResponse response, bool showInline) | No Modern API replacement |
| public void Print() | No Modern API replacement |
| public void Print(PrinterSettings printerSettings) | No Modern API replacement |
| public void Print(string printerName) | No Modern API replacement |
| public void Print(PrinterSettings printerSettings, string presName) | No Modern API replacement |
Shape
| मेथड सिग्नेचर | प्रतिस्थापन मेथड सिग्नेचर |
|---|---|
| public Bitmap GetThumbnail() | GetImage |
| public Bitmap GetThumbnail(ShapeThumbnailBounds bounds, float scaleX, float scaleY) | GetImage(ShapeThumbnailBounds bounds, float scaleX, float scaleY) |
Slide
| मेथड सिग्नेचर | प्रतिस्थापन मेथड सिग्नेचर |
|---|---|
| public Bitmap GetThumbnail(float scaleX, float scaleY) | GetImage(float scaleX, float scaleY) |
| public Bitmap GetThumbnail() | GetImage |
| public Bitmap GetThumbnail(IRenderingOptions options) | GetImage(IRenderingOptions options) |
| public Bitmap GetThumbnail(Size imageSize) | GetImage(Size imageSize) |
| public Bitmap GetThumbnail(ITiffOptions options) | GetImage(ITiffOptions options) |
| public Bitmap GetThumbnail(IRenderingOptions options, float scaleX, float scaleY) | GetImage(IRenderingOptions options, float scaleX, float scaleY) |
| public Bitmap GetThumbnail(IRenderingOptions options, Size imageSize) | GetImage(IRenderingOptions options, Size imageSize) |
| public void RenderToGraphics(IRenderingOptions options, Graphics graphics) | No Modern API replacement |
| public void RenderToGraphics(IRenderingOptions options, Graphics graphics, float scaleX, float scaleY) | No Modern API replacement |
| public void RenderToGraphics(IRenderingOptions options, Graphics graphics, Size renderingSize) | No Modern API replacement |
Output
| मेथड सिग्नेचर | प्रतिस्थापन मेथड सिग्नेचर |
|---|---|
| public IOutputFile Add(string path, Image image) | Add(string path, IImage image) |
ImageCollection
| मेथड सिग्नेचर | प्रतिस्थापन मेथड सिग्नेचर |
|---|---|
| IPPImage AddImage(Image image) | AddImage(IImage image) |
ImageWrapperFactory
| मेथड सिग्नेचर | प्रतिस्थापन मेथड सिग्नेचर |
|---|---|
| IImageWrapper CreateImageWrapper(Image image) | CreateImageWrapper(IImage image) |
PPImage
| मेथड/प्रॉपर्टी सिग्नेचर | प्रतिस्थापन मेथड सिग्नेचर |
|---|---|
| void ReplaceImage(Image newImage) | ReplaceImage(IImage newImage) |
| Image SystemImage { get; } | IImage Image { get; } |
PatternFormat
| मेथड सिग्नेचर | प्रतिस्थापन मेथड सिग्नेचर |
|---|---|
| Bitmap GetTileImage(Color background, Color foreground) | GetTile(Color background, Color foreground) |
| Bitmap GetTileImage(Color styleColor) | GetTile(Color styleColor) |
IPatternFormatEffectiveData
| मेथड सिग्नेचर | प्रतिस्थापन मेथड सिग्नेचर |
|---|---|
| Bitmap GetTileImage(Color background, Color foreground) | GetTileIImage(SlidesImage image) |
Graphics और PrinterSettings के लिए API समर्थन
Graphics क्लास .NET6 और उसके ऊपर के क्रॉस‑प्लैटफ़ॉर्म संस्करणों में समर्थित नहीं है। Aspose Slides में, Graphics पर रेंडर करने वाले API की जगह आधुनिक API इमेज‑रेंडरिंग मेथड का उपयोग करें: ISlide
- public void RenderToGraphics(IRenderingOptions options, Graphics graphics)
- public void RenderToGraphics(IRenderingOptions options, Graphics graphics, float scaleX, float scaleY)
- public void RenderToGraphics(IRenderingOptions options, Graphics graphics, Size renderingSize)
इसी तरह, PrinterSettings से संबंधित API का कोई प्रत्यक्ष आधुनिक API प्रतिस्थापन नहीं है:
- public void Presentation.Print
- public void Print(PrinterSettings printerSettings)
- public void Print(string printerName)
- public void Print(PrinterSettings printerSettings, string presName)
अक्सर पूछे जाने वाले प्रश्न
Graphics को क्यों हटाया गया?
Graphics का समर्थन सार्वजनिक API में अप्रचलित किया गया है ताकि रेंडरिंग और इमेज के साथ काम को एकीकृत किया जा सके, प्लेटफ़ॉर्म‑विशिष्ट निर्भरताओं को हटाया जा सके, और IImage के साथ क्रॉस‑प्लैटफ़ॉर्म दृष्टिकोण अपनाया जा सके। Graphics पर रेंडर करने के बजाय GetImage या GetImages का उपयोग करें।
IImage का Image/Bitmap की तुलना में व्यावहारिक लाभ क्या है?
IImage रास्टर और वेक्टर दोनों छवियों के साथ काम को एकीकृत करता है, ImageFormat के माध्यम से विभिन्न स्वरूपों में सहेजना सरल बनाता है, System.Drawing पर निर्भरता को कम करता है, और कोड को विभिन्न वातावरणों में अधिक पोर्टेबल बनाता है।
क्या आधुनिक API थंबनेल उत्पन्न करने के प्रदर्शन को प्रभावित करेगा?
GetThumbnail से GetImage में स्विच करने से प्रदर्शन में गिरावट नहीं आती; नई मेथड समान क्षमताएँ प्रदान करती हैं, विकल्पों और आकारों के साथ इमेज उत्पन्न करने के लिए, और रेंडरिंग विकल्पों को भी संरक्षित रखती हैं। विशिष्ट लाभ या कमी परिदृश्य पर निर्भर करती है, परन्तु कार्यात्मक रूप से प्रतिस्थापन समतुल्य हैं।