Verbeter beeldverwerking met de Moderne API

Inleiding

Historisch gezien heeft Aspose Slides een afhankelijkheid van System.Drawing en bevat de openbare API de volgende klassen daarvan:

Vanaf versie 24.4 wordt deze openbare API gemarkeerd als verouderd.

Aangezien System.Drawing‑ondersteuning in .NET 6 en hoger voor niet‑Windows‑versies is verwijderd (breaking change), heeft Slides een twee‑pakketbenadering geïmplementeerd:

Het ongemak van Aspose.Slides.NET6.CrossPlatform is dat het een eigen versie van System.Drawing implementeert in dezelfde namespace (om backward compatibility met de publieke API te ondersteunen). Daardoor ontstaat er een naamsconflict wanneer Aspose.Slides.NET6.CrossPlatform en System.Drawing van .NET Framework of het System.Drawing.Common‑pakket gelijktijdig worden gebruikt, tenzij een alias wordt toegepast.

Om de afhankelijkheden van System.Drawing in het hoofdpakket Aspose.Slides.NET te elimineren, hebben we de zogenoemde “Moderne API” toegevoegd – d.w.z. de API die in plaats van de verouderde moet worden gebruikt, waarvan de handtekeningen afhankelijk zijn van de volgende types uit System.Drawing: Image en Bitmap. PrinterSettings en Graphics zijn gemarkeerd als verouderd en hun ondersteuning is verwijderd uit de publieke Slides‑API.

In de huidige versies moet de publieke API die afhankelijk is van System.Drawing als legacy/verouderd worden beschouwd. Gebruik de Moderne API voor nieuwe code en bij het migreren van bestaande beeldverwerkingsworkflows.

Moderne API

De volgende klassen en enumeraties zijn toegevoegd aan de publieke API:

Let op: IImage is disposable (het implementeert de IDisposable‑interface en moet worden omgeven met using of op een andere handige manier worden vrijgegeven).

Gebruik GetImage om één enkele slide of vorm te renderen. Gebruik GetImages om meerdere presentatieslides te renderen. Gebruik de methoden van Images om beelden te laden, AddImage met een IImage om ze aan een presentatie toe te voegen, en ReplaceImage met een IImage om een bestaand presentatiefoto bij te werken.

Een typisch scenario met de nieuwe API ziet er als volgt uit:

using (Presentation pres = new Presentation())
{
    IPPImage ppImage;
    // instantieer een disposable instantie van IImage vanaf het bestand op de schijf.
    using (IImage image = Images.FromFile("image.png"))
    {
        // maak een PowerPoint‑afbeelding aan door een IImage‑instantie toe te voegen aan de images van de presentatie.
        ppImage = pres.Images.AddImage(image);
    }

    // voeg een afbeeldingvorm toe op slide #1
    pres.Slides[0].Shapes.AddPictureFrame(ShapeType.Rectangle, 10, 10, 100, 100, ppImage);

    // verkrijg een IImage‑instantie die slide #1 voorstelt.
    using (var slideImage = pres.Slides[0].GetImage(new Size(1920, 1080)))
    {
        // sla de afbeelding op de schijf op.
        slideImage.Save("slide1.jpeg", ImageFormat.Jpeg);
    }
}

Oude code vervangen door Moderne API

Om de transitie te vergemakkelijken herhaalt de interface van de nieuwe IImage de afzonderlijke handtekeningen van de klassen Image en Bitmap. Over het algemeen hoef je alleen de aanroep van de oude methode die System.Drawing gebruikte te vervangen door de nieuwe.

Een slide‑miniatuur ophalen

Legacy/verouderde API:

using (Presentation pres = new Presentation("pres.pptx"))
{
    pres.Slides[0].GetThumbnail().Save("slide1.png");
}

Moderne API:

using (Presentation pres = new Presentation("pres.pptx"))
{
    pres.Slides[0].GetImage().Save("slide1.png");
}

Een vorm‑miniatuur ophalen

Legacy/verouderde API:

using (Presentation pres = new Presentation("pres.pptx"))
{
    pres.Slides[0].Shapes[0].GetThumbnail().Save("shape.png");
}

Moderne API:

using (Presentation pres = new Presentation("pres.pptx"))
{
    pres.Slides[0].Shapes[0].GetImage().Save("shape.png");
}

Een presentatieminiatuur ophalen

Legacy/verouderde 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();
        }
    }
}

Moderne 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();
        }
    }
}

Een afbeelding aan een presentatie toevoegen

Legacy/verouderde 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);
}

Moderne 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);
}

Verouderde methoden/eigenschappen en hun vervanging in Moderne API

Presentation

Methodehandtekening Vervangende methodehandtekening
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

Methodehandtekening Vervangende methodehandtekening
public Bitmap GetThumbnail() GetImage
public Bitmap GetThumbnail(ShapeThumbnailBounds bounds, float scaleX, float scaleY) GetImage(ShapeThumbnailBounds bounds, float scaleX, float scaleY)

Slide

Methodehandtekening Vervangende methodehandtekening
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

Methodehandtekening Vervangende methodehandtekening
public IOutputFile Add(string path, Image image) Add(string path, IImage image)

ImageCollection

Methodehandtekening Vervangende methodehandtekening
IPPImage AddImage(Image image) AddImage(IImage image)

ImageWrapperFactory

Methodehandtekening Vervangende methodehandtekening
IImageWrapper CreateImageWrapper(Image image) CreateImageWrapper(IImage image)

PPImage

Methode/eigenschap Vervangende methode
void ReplaceImage(Image newImage) ReplaceImage(IImage newImage)
Image SystemImage { get; } IImage Image { get; }

PatternFormat

Methodehandtekening Vervangende methodehandtekening
Bitmap GetTileImage(Color background, Color foreground) GetTile(Color background, Color foreground)
Bitmap GetTileImage(Color styleColor) GetTile(Color styleColor)

IPatternFormatEffectiveData

Methodehandtekening Vervangende methodehandtekening
Bitmap GetTileImage(Color background, Color foreground) GetTileIImage(SlidesImage image)

API‑ondersteuning voor Graphics en PrinterSettings

De Graphics‑klasse wordt niet ondersteund voor cross‑platform versies van .NET 6 en hoger. In Aspose Slides moet je de Moderne API‑methoden voor beeldrendering gebruiken in plaats van de API die naar Graphics rendert: ISlide

Ook de API die verband houdt met afdrukken via PrinterSettings heeft geen directe Moderne API‑vervanging:

IPresentation:

FAQ

Waarom is Graphics verwijderd?

Ondersteuning voor Graphics is gemarkeerd als verouderd in de publieke API om het werk met renderen en beelden te uniformiseren, afhankelijkheden van platform‑specifieke libraries te elimineren en over te stappen op een cross‑platform aanpak met IImage. Gebruik GetImage of GetImages in plaats van renderen naar Graphics.

Wat is het praktische voordeel van IImage ten opzichte van Image/Bitmap?

IImage verenigt het werken met zowel raster‑ als vector‑beelden, vereenvoudigt het opslaan naar verschillende formaten via ImageFormat, vermindert de afhankelijkheid van System.Drawing en maakt de code draagbaarder tussen verschillende omgevingen.

Zal de Moderne API de prestaties van het genereren van miniaturen beïnvloeden?

Overschakelen van GetThumbnail naar GetImage schaadt de prestaties niet: de nieuwe methoden bieden dezelfde mogelijkheden om beelden met opties en afmetingen te produceren, terwijl ze de render‑opties behouden. De exacte winst of verlies hangt af van het scenario, maar functioneel zijn de vervangingen gelijkwaardig.