Améliorer le traitement d'images avec l'API Moderne
Introduction
Historiquement, Aspose Slides a une dépendance à System.Drawing et expose dans son API publique les classes suivantes provenant de cet espace de noms :
Depuis la version 24.4, cette API publique est déclarée obsolète.
Comme le support de System.Drawing dans les versions .NET 6 et supérieures est supprimé pour les plateformes non Windows (modification breaking), Slides a mis en place une approche à deux bibliothèques :
- Aspose.Slides.NET – support pour .NET 6+ sous Windows, .NETStandard pour Windows/Linux/macOS, .NETFramework 2+ (Windows).
- dépend de System.Drawing.Common.
- Aspose.Slides.NET6.CrossPlatform – version Windows/Linux/macOS sans dépendances.
L’inconvénient de Aspose.Slides.NET6.CrossPlatform est qu’il implémente sa propre version de System.Drawing dans le même espace de noms (pour garantir la compatibilité rétroactive avec l’API publique). Ainsi, lorsqu’Aspose.Slides.NET6.CrossPlatform et System.Drawing provenant de .NETFramework ou du package System.Drawing.Common sont utilisés simultanément, un conflit de noms apparaît à moins d’utiliser un alias.
Afin d’éliminer les dépendances à System.Drawing dans le paquet principal Aspose.Slides.NET, nous avons ajouté la dite « Modern API » — c’est‑à‑dire l’API qui doit être utilisée à la place de l’ancienne, dont les signatures ne contiennent plus de dépendances aux types System.Drawing : Image et Bitmap. PrinterSettings et Graphics sont déclarés obsolètes et leur support est retiré de l’API publique Slides.
La suppression de l’API publique obsolète dépendante de System.Drawing sera réalisée dans la version 24.8.
Modern API
Ajout des classes et énumérations suivantes à l’API publique :
- Aspose.Slides.IImage – représente l’image raster ou vectorielle.
- Aspose.Slides.ImageFormat – représente le format de fichier de l’image.
- Aspose.Slides.Images – méthodes pour instancier et travailler avec l’interface IImage.
Veuillez noter que IImage est jetable (il implémente l’interface IDisposable et son utilisation doit être encadrée par un using ou être libérée d’une autre manière appropriée).
Un scénario typique d’utilisation de la nouvelle API peut ressembler à ceci :
using (Presentation pres = new Presentation())
{
IPPImage ppImage;
// instancier une instance jetable de IImage à partir du fichier sur le disque.
using (IImage image = Images.FromFile("image.png"))
{
// créer une image PowerPoint en ajoutant une instance de IImage aux images de la présentation.
ppImage = pres.Images.AddImage(image);
}
// ajouter une forme image sur la diapositive #1
pres.Slides[0].Shapes.AddPictureFrame(ShapeType.Rectangle, 10, 10, 100, 100, ppImage);
// obtenir une instance de IImage représentant la diapositive #1.
using (var slideImage = pres.Slides[0].GetImage(new Size(1920, 1080)))
{
// enregistrer l'image sur le disque.
slideImage.Save("slide1.jpeg", ImageFormat.Jpeg);
}
}
Remplacement du code ancien par la Modern API
Pour faciliter la transition, l’interface du nouveau IImage reproduit les signatures distinctes des classes Image et Bitmap. En pratique, il vous suffit de remplacer l’appel à l’ancienne méthode utilisant System.Drawing par la nouvelle.
Obtention d’une miniature de diapositive
Code utilisant une API obsolète :
using (Presentation pres = new Presentation("pres.pptx"))
{
pres.Slides[0].GetThumbnail().Save("slide1.png");
}
Modern API :
using (Presentation pres = new Presentation("pres.pptx"))
{
pres.Slides[0].GetImage().Save("slide1.png");
}
Obtention d’une miniature de forme
Code utilisant une API obsolète :
using (Presentation pres = new Presentation("pres.pptx"))
{
pres.Slides[0].Shapes[0].GetThumbnail().Save("shape.png");
}
Modern API :
using (Presentation pres = new Presentation("pres.pptx"))
{
pres.Slides[0].Shapes[0].GetImage().Save("shape.png");
}
Obtention d’une miniature de présentation
Code utilisant une API obsolète :
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();
}
}
}
Modern 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();
}
}
}
Ajout d’une image à une présentation
Code utilisant une API obsolète :
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);
}
Modern 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);
}
Méthodes/Propriétés à supprimer et leurs remplacements dans la Modern API
Presentation
| Signature de méthode | Signature de méthode de remplacement |
|---|---|
| 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) | Sera complètement supprimé |
| public void Save(string fname, SaveFormat format, ISaveOptions options, HttpResponse response, bool showInline) | Sera complètement supprimé |
| public void Print() | Sera complètement supprimé |
| public void Print(PrinterSettings printerSettings) | Sera complètement supprimé |
| public void Print(string printerName) | Sera complètement supprimé |
| public void Print(PrinterSettings printerSettings, string presName) | Sera complètement supprimé |
Shape
| Signature de méthode | Signature de méthode de remplacement |
|---|---|
| public Bitmap GetThumbnail() | GetImage |
| public Bitmap GetThumbnail(ShapeThumbnailBounds bounds, float scaleX, float scaleY) | GetImage(ShapeThumbnailBounds bounds, float scaleX, float scaleY) |
Slide
| Signature de méthode | Signature de méthode de remplacement |
|---|---|
| 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) | Sera complètement supprimé |
| public void RenderToGraphics(IRenderingOptions options, Graphics graphics, float scaleX, float scaleY) | Sera complètement supprimé |
| public void RenderToGraphics(IRenderingOptions options, Graphics graphics, Size renderingSize) | Sera complètement supprimé |
Output
| Signature de méthode | Signature de méthode de remplacement |
|---|---|
| public IOutputFile Add(string path, Image image) | Add(string path, IImage image) |
ImageCollection
| Signature de méthode | Signature de méthode de remplacement |
|---|---|
| IPPImage AddImage(Image image) | AddImage(IImage image) |
ImageWrapperFactory
| Signature de méthode | Signature de méthode de remplacement |
|---|---|
| IImageWrapper CreateImageWrapper(Image image) | CreateImageWrapper(IImage image) |
PPImage
| Signature de méthode/propriété | Signature de méthode de remplacement |
|---|---|
| void ReplaceImage(Image newImage) | ReplaceImage(IImage newImage) |
| Image SystemImage { get; } | IImage Image { get; } |
PatternFormat
| Signature de méthode | Signature de méthode de remplacement |
|---|---|
| Bitmap GetTileImage(Color background, Color foreground) | GetTile(Color background, Color foreground) |
| Bitmap GetTileImage(Color styleColor) | GetTile(Color styleColor) |
IPatternFormatEffectiveData
| Signature de méthode | Signature de méthode de remplacement |
|---|---|
| Bitmap GetTileImage(Color background, Color foreground) | GetTileIImage(SlidesImage image) |
Le support de Graphics et PrinterSettings sera interrompu
La classe Graphics n’est pas prise en charge pour les versions multiplateformes de .NET 6 et supérieures. Dans Aspose Slides, la partie de l’API qui l’utilise sera supprimée : Slide
- 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)
De même, la partie de l’API liée à l’impression sera retirée :
- public void Presentation.Print
- public void Print(PrinterSettings printerSettings)
- public void Print(string printerName)
- public void Print(PrinterSettings printerSettings, string presName)
FAQ
Pourquoi System.Drawing.Graphics a‑t‑il été abandonné ?
Le support de Graphics est retiré de l’API publique afin d’unifier le travail de rendu et d’images, d’éliminer les dépendances spécifiques à la plateforme et de passer à une approche multiplateforme avec IImage. Toutes les méthodes de rendu vers Graphics seront supprimées.
Quel est l’avantage pratique d’IImage par rapport à Image/Bitmap ?
IImage unifie le traitement des images raster et vectorielles, simplifie l’enregistrement dans divers formats via ImageFormat, réduit la dépendance à System.Drawing et rend le code plus portable entre les environnements.
La Modern API affectera‑t‑elle les performances de génération de miniatures ?
Passer de GetThumbnail à GetImage n’altère pas les scénarios : les nouvelles méthodes offrent les mêmes capacités pour produire des images avec options et tailles, tout en conservant le support des options de rendu. Le gain ou la perte spécifiques dépendent du scénario, mais fonctionnellement les remplacements sont équivalents.