Βελτιώστε την Επεξεργασία Εικόνας με το Σύγχρονο API
Εισαγωγή
Ιστορικά, το Aspose Slides εξαρτάται από το System.Drawing και στο δημόσιο API περιλαμβάνει τις ακόλουθες κλάσεις από αυτό:
Από την έκδοση 24.4, αυτό το δημόσιο API έχει χαρακτηριστεί ως παρωχημένο.
Καθώς η υποστήριξη του System.Drawing στις εκδόσεις .NET6 και άνω αφαιρέθηκε για μη‑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 και το System.Drawing από το .NET Framework ή το πακέτο System.Drawing.Common χρησιμοποιούνται ταυτόχρονα, προκύπτει σύγκρουση ονομάτων εκτός εάν χρησιμοποιηθεί ψευδώνυμο.
Για να απαλλαγούμε από τις εξαρτήσεις στο System.Drawing στο κύριο πακέτο Aspose.Slides.NET, προσθέσαμε το λεγόμενο «Modern API» – δηλαδή το API που θα πρέπει να χρησιμοποιείται αντί του παρωχημένου, των οποίων οι υπογραφές περιέχουν εξαρτήσεις στους παρακάτω τύπους από το System.Drawing: [Image] και [Bitmap]. Οι [PrinterSettings] και [Graphics] έχουν χαρακτηριστεί ως παρωχημένα και η υποστήριξή τους αφαιρέθηκε από το δημόσιο API του Slides.
Στις τρέχουσες εκδόσεις, αντιμετωπίζετε το δημόσιο API που εξαρτάται από το System.Drawing ως παλαιότερο/παρωχημένο. Χρησιμοποιήστε το Modern API για νέο κώδικα και κατά τη μετάβαση των υφιστάμενων ροών εργασίας επεξεργασίας εικόνας.
Σύγχρονο API
Προστέθηκαν οι παρακάτω κλάσεις και enum στο δημόσιο API:
- Aspose.Slides.IImage - αντιπροσωπεύει την ραστική ή διανυσματική εικόνα.
- Aspose.Slides.ImageFormat - αντιπροσωπεύει τη μορφή αρχείου της εικόνας.
- Aspose.Slides.Images - μέθοδοι για δημιουργία και εργασία με τη διεπαφή IImage.
Παρακαλούμε σημειώστε ότι το [IImage] είναι διαχειρίσιμο (υλοποιεί τη διεπαφή [IDisposable] και η χρήση του πρέπει να περιβάλλεται σε using ή να διακοπτεί με άλλο βολικό τρόπο).
Χρησιμοποιήστε GetImage για απόδοση μιας ενιαίας διαφάνειας ή σχήματος. Χρησιμοποιήτε GetImages για απόδοση πολλαπλών διαφανειών παρουσίασης. Χρησιμοποιήτε τις μεθόδους του [Images] για φόρτωση εικόνων, AddImage με [IImage] για προσθήκη τους σε παρουσίαση, και ReplaceImage με [IImage] για ενημέρωση υπάρχουσας εικόνας παρουσίασης.
Ένα τυπικό σενάριο χρήσης του νέου API μπορεί να φαίνεται ως εξής:
using (Presentation pres = new Presentation())
{
IPPImage ppImage;
// δημιουργήστε μια διαχειρίσιμη εμφάνιση του IImage από το αρχείο στο δίσκο.
using (IImage image = Images.FromFile("image.png"))
{
// δημιουργήστε μια εικόνα PowerPoint προσθέτοντας μια εμφάνιση IImage στις εικόνες της παρουσίασης.
ppImage = pres.Images.AddImage(image);
}
// προσθέστε ένα σχήμα εικόνας στη διαφάνεια #1
pres.Slides[0].Shapes.AddPictureFrame(ShapeType.Rectangle, 10, 10, 100, 100, ppImage);
// λάβετε μια εμφάνιση του IImage που αντιπροσωπεύει τη διαφάνεια #1.
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");
}
Λήψη μικρογραφίας σχήματος
Παλιό/παρωχημένο 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) |
Υποστήριξη API για Graphics και PrinterSettings
Η κλάση [Graphics] δεν υποστηρίζεται για εκδόσεις .NET6 και άνω που είναι πλατφόρμα‑αμετάβατες. Στο Aspose Slides, χρησιμοποιήστε τις μεθόδους απόδοσης εικόνας του Σύγχρονου API αντί του API που αποδίδει σε [Graphics]: 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)
Επιπλέον, το API που σχετίζεται με την εκτύπωση μέσω [PrinterSettings] δεν έχει άμεση αντικατάσταση στο Σύγχρονο API: IPresentation:
- 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]. Χρησιμοποιήστε GetImage ή GetImages αντί για απόδοση σε [Graphics].
Ποιο είναι το πρακτικό όφελος του [IImage] σε σύγκριση με το [Image]/[Bitmap];
[IImage] ενοποιεί τη δουλειά με τόσο ραστικές όσο και διανυσματικές εικόνες, απλοποιεί την αποθήκευση σε διάφορες μορφές μέσω του [ImageFormat], μειώνει την εξάρτηση από το System.Drawing, και καθιστά τον κώδικα πιο φορητό μεταξύ περιβάλλοντων.
Θα επηρεάσει το Σύγχρονο API την απόδοση της δημιουργίας μικρογραφιών;
Η μετάβαση από το GetThumbnail στο GetImage δεν επηρεάζει αρνητικά τις συνθήκες: οι νέες μέθοδοι παρέχουν τις ίδιες δυνατότητες για παραγωγή εικόνων με επιλογές και μεγέθη, ενώ διατηρούν την υποστήριξη για επιλογές απόδοσης. Το συγκεκριμένο κέρδος ή η απώλεια εξαρτάται από το σενάριο, αλλά λειτουργικά οι αντικαταστάσεις είναι ισοδύναμες.