Migliora l'elaborazione delle immagini con l'API Moderna
Introduzione
Storicamente, Aspose Slides ha una dipendenza da System.Drawing e ha nell’API pubblica le seguenti classi provenienti da lì:
A partire dalla versione 24.4, questa API pubblica è dichiarata obsoleta.
Poiché il supporto di System.Drawing nelle versioni .NET6 e successive è stato rimosso per le versioni non Windows (breaking change), Slides ha implementato un approccio a due pacchetti:
- Aspose.Slides.NET - supporto per .NET6+ per Windows, .NETStandard per Windows/Linux/macOS, .NETFramework 2+ (Windows).
- ha una dipendenza da System.Drawing.Common.
- Aspose.Slides.NET6.CrossPlatform - versione Windows/Linux/macOS senza dipendenze.
La difficoltà di Aspose.Slides.NET6.CrossPlatform è che implementa la propria versione di System.Drawing nello stesso namespace (per supportare la retrocompatibilità con l’API pubblica). Pertanto, quando Aspose.Slides.NET6.CrossPlatform e System.Drawing dal .NET Framework o dal pacchetto System.Drawing.Common vengono usati contemporaneamente, si verifica un conflitto di nomi a meno che non venga usato un alias.
Per eliminare le dipendenze da System.Drawing nel pacchetto principale Aspose.Slides.NET, abbiamo aggiunto la cosiddetta “Modern API” – cioè l’API da utilizzare al posto di quella deprecata, le cui firme contengono dipendenze dai seguenti tipi di System.Drawing: Image e Bitmap. PrinterSettings e Graphics sono dichiarati obsoleti e il loro supporto è stato rimosso dall’API pubblica di Slides.
Nelle versioni attuali, considerare l’API pubblica che dipende da System.Drawing come legacy/obsoleta. Utilizzare la Modern API per nuovo codice e quando si migra i flussi di lavoro di elaborazione delle immagini esistenti.
API Moderna
Aggiunte le seguenti classi e enum all’API pubblica:
- Aspose.Slides.IImage - rappresenta l’immagine raster o vettoriale.
- Aspose.Slides.ImageFormat - rappresenta il formato file dell’immagine.
- Aspose.Slides.Images - metodi per istanziare e lavorare con l’interfaccia IImage.
Si noti che IImage è disposable (implementa l’interfaccia IDisposable e il suo utilizzo dovrebbe essere avvolto in un using o eliminato in un altro modo pratico).
Usa GetImage per renderizzare una singola diapositiva o forma. Usa GetImages per renderizzare diverse diapositive della presentazione. Usa i metodi di Images per caricare le immagini, AddImage con IImage per aggiungerle a una presentazione, e ReplaceImage con IImage per aggiornare un’immagine esistente della presentazione.
Uno scenario tipico di utilizzo della nuova API può apparire come segue:
using (Presentation pres = new Presentation())
{
IPPImage ppImage;
// istanzia un'istanza disposable di IImage dal file sul disco.
using (IImage image = Images.FromFile("image.png"))
{
// crea un'immagine PowerPoint aggiungendo un'istanza di IImage alle immagini della presentazione.
ppImage = pres.Images.AddImage(image);
}
// aggiungi una forma immagine sulla diapositiva #1
pres.Slides[0].Shapes.AddPictureFrame(ShapeType.Rectangle, 10, 10, 100, 100, ppImage);
// ottieni un'istanza di IImage che rappresenta la diapositiva #1.
using (var slideImage = pres.Slides[0].GetImage(new Size(1920, 1080)))
{
// salva l'immagine sul disco.
slideImage.Save("slide1.jpeg", ImageFormat.Jpeg);
}
}
Sostituire il Codice Obsoleto con la Modern API
Per facilitare la transizione, l’interfaccia del nuovo IImage ripete le firme separate delle classi Image e Bitmap. In generale, dovrai semplicemente sostituire la chiamata al metodo vecchio che utilizza System.Drawing con quella nuova.
Ottenere una Miniatura della Diapositiva
API legacy/obsoleta:
using (Presentation pres = new Presentation("pres.pptx"))
{
pres.Slides[0].GetThumbnail().Save("slide1.png");
}
API Moderna:
using (Presentation pres = new Presentation("pres.pptx"))
{
pres.Slides[0].GetImage().Save("slide1.png");
}
Ottenere una Miniatura della Forma
API legacy/obsoleta:
using (Presentation pres = new Presentation("pres.pptx"))
{
pres.Slides[0].Shapes[0].GetThumbnail().Save("shape.png");
}
API Moderna:
using (Presentation pres = new Presentation("pres.pptx"))
{
pres.Slides[0].Shapes[0].GetImage().Save("shape.png");
}
Ottenere una Miniatura della Presentazione
API legacy/obsoleta:
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 Moderna:
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();
}
}
}
Aggiungere un’Immagine a una Presentazione
API legacy/obsoleta:
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 Moderna:
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);
}
Metodi/Proprietà Deprecati e le loro Sostituzioni nella Modern API
Presentazione
| Firma del Metodo | Firma del Metodo di Sostituzione |
|---|---|
| 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 |
Forma
| Firma del Metodo | Firma del Metodo di Sostituzione |
|---|---|
| public Bitmap GetThumbnail() | GetImage |
| public Bitmap GetThumbnail(ShapeThumbnailBounds bounds, float scaleX, float scaleY) | GetImage(ShapeThumbnailBounds bounds, float scaleX, float scaleY) |
Diapositiva
| Firma del Metodo | Firma del Metodo di Sostituzione |
|---|---|
| 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
| Firma del Metodo | Firma del Metodo di Sostituzione |
|---|---|
| public IOutputFile Add(string path, Image image) | Add(string path, IImage image) |
ImageCollection
| Firma del Metodo | Firma del Metodo di Sostituzione |
|---|---|
| IPPImage AddImage(Image image) | AddImage(IImage image) |
ImageWrapperFactory
| Firma del Metodo | Firma del Metodo di Sostituzione |
|---|---|
| IImageWrapper CreateImageWrapper(Image image) | CreateImageWrapper(IImage image) |
PPImage
| Firma del Metodo/Proprietà | Firma del Metodo di Sostituzione |
|---|---|
| void ReplaceImage(Image newImage) | ReplaceImage(IImage newImage) |
| Image SystemImage { get; } | IImage Image { get; } |
PatternFormat
| Firma del Metodo | Firma del Metodo di Sostituzione |
|---|---|
| Bitmap GetTileImage(Color background, Color foreground) | GetTile(Color background, Color foreground) |
| Bitmap GetTileImage(Color styleColor) | GetTile(Color styleColor) |
IPatternFormatEffectiveData
| Firma del Metodo | Firma del Metodo di Sostituzione |
|---|---|
| Bitmap GetTileImage(Color background, Color foreground) | GetTileIImage(SlidesImage image) |
Supporto API per Graphics e PrinterSettings
La classe Graphics non è supportata per le versioni cross‑platform di .NET6 e superiori. In Aspose Slides, usa i metodi di rendering di immagini della Modern API invece dell’API che renderizza su 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)
Inoltre, l’API correlata alla stampa tramite PrinterSettings non ha una sostituzione diretta nella Modern API:
- public void Presentation.Print
- public void Print(PrinterSettings printerSettings)
- public void Print(string printerName)
- public void Print(PrinterSettings printerSettings, string presName)
Domande Frequenti
Perché è stata rimossa Graphics?
Il supporto per Graphics è deprecato nell’API pubblica per unificare il lavoro con il rendering e le immagini, eliminare i legami a dipendenze specifiche della piattaforma e passare a un approccio cross‑platform con IImage. Usa GetImage o GetImages invece di renderizzare su Graphics.
Qual è il beneficio pratico di IImage rispetto a Image/Bitmap?
IImage unifica il lavoro con immagini raster e vettoriali, semplifica il salvataggio in vari formati tramite ImageFormat, riduce la dipendenza da System.Drawing e rende il codice più portabile tra ambienti.
Il Modern API influenzerà le prestazioni nella generazione delle miniature?
Il passaggio da GetThumbnail a GetImage non peggiora gli scenari: i nuovi metodi offrono le stesse capacità di produrre immagini con opzioni e dimensioni, mantenendo il supporto per le opzioni di rendering. Il guadagno o la perdita specifici dipendono dallo scenario, ma funzionalmente le sostituzioni sono equivalenti.