Képfeldolgozás fejlesztése a Modern API-val

Bevezetés

Történelmileg az Aspose Slides a System.Drawing-től függ, és a nyilvános API-ban a következő osztályokat tartalmazza onnan:

A 24.4-es verziótól kezdve ez a nyilvános API elavultnak lett jelölve.

Mivel a System.Drawing támogatása a .NET6 és újabb verziókban a nem Windows verziók esetén eltávolításra került (breaking change), a Slides egy kétcsomagos megközelítést vezetett be:

A [Aspose.Slides.NET6.CrossPlatform] kényelmetlensége, hogy saját System.Drawing változatot valósít meg ugyanabban a névtérben (a nyilvános API visszamenőleges kompatibilitásának támogatása érdekében). Így ha az Aspose.Slides.NET6.CrossPlatform és a .NET Framework‑ből vagy a System.Drawing.Common csomagból származó System.Drawing egyszerre kerül felhasználásra, névütközés keletkezik, hacsak nem használunk alias-t.

Az Aspose.Slides.NET főcsomagjában a System.Drawing függőségek eltávolítása érdekében bevezettük a úgynevezett „Modern API”-t – vagyis azt az API-t, amelyet a deprecated API helyett kell használni, és amelynek aláírásai a System.Drawing következő típusaira hivatkoznak: Image és Bitmap. A PrinterSettings és a Graphics elavultnak van jelölve, és támogatásuk eltávolításra került a nyilvános Slides API-ból.

A jelenlegi verziókban a System.Drawing-re támaszkodó nyilvános API-t tekintse legacy/elavultnak. Új kódíráskor és a meglévő képfeldolgozó munkafolyamatok migrálásakor használja a Modern API-t.

Modern API

A következő osztályokat és felsorolásokat adtuk a nyilvános API-hoz:

Fontos megjegyezni, hogy az IImage eldobható (implementálja a IDisposable interfészt, és használatát using‑ban vagy más kényelmes módon kell lezárni).

Használja a GetImage‑t egyetlen dia vagy alakzat rendereléséhez. Használja a GetImages‑t több prezentációs dia rendereléséhez. Használja a Images metódusait képek betöltéséhez, a AddImage‑t az IImage segítségével a prezentációhoz való hozzáadáshoz, valamint a ReplaceImage‑t az IImage használatával egy meglévő prezentációs kép frissítéséhez.

Egy tipikus új API használati forgatókönyv a következőképpen néz ki:

using (Presentation pres = new Presentation())
{
    IPPImage ppImage;
    // hozzon létre egy eldobható IImage példányt a lemezen lévő fájlból.  
    using (IImage image = Images.FromFile("image.png"))
    {
        // hozzon létre egy PowerPoint képet az IImage példány prezentáció képeihez való hozzáadásával.
        ppImage = pres.Images.AddImage(image);
    }

    // adjon hozzá egy képalakzatot az 1. diára
    pres.Slides[0].Shapes.AddPictureFrame(ShapeType.Rectangle, 10, 10, 100, 100, ppImage);

    // szerezzen egy IImage példányt, amely az 1. diát reprezentálja.
    using (var slideImage = pres.Slides[0].GetImage(new Size(1920, 1080)))
    {
        // mentse a képet a lemezre.
        slideImage.Save("slide1.jpeg", ImageFormat.Jpeg);
    }
}

A régi kód Modern API-val történő helyettesítése

Az átmenet megkönnyítése érdekében az új IImage interfész megismétli a Image és a Bitmap osztályok különálló aláírásait. Általában csak annyit kell tennie, hogy a System.Drawing-et használó régi metódushívást kicseréli az újra.

Dia bélyegkép lekérése

Régi/elavult API:

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

Alakzat bélyegkép lekérése

Régi/elavult API:

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

Prezentáció bélyegkép lekérése

Régi/elavult 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();
        }
    }
}

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

Kép hozzáadása a prezentációhoz

Régi/elavult 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);
}

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

Elavult metódusok/tulajdonságok és azok helyettesítése a Modern API-ban

Prezentáció

Metódus aláírása Helyettesítő metódus aláírása
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

Alakzat

Metódus aláírása Helyettesítő metódus aláírása
public Bitmap GetThumbnail() GetImage
public Bitmap GetThumbnail(ShapeThumbnailBounds bounds, float scaleX, float scaleY) GetImage(ShapeThumbnailBounds bounds, float scaleX, float scaleY)

Dia

Metódus aláírása Helyettesítő metódus aláírása
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

Kimenet

Metódus aláírása Helyettesítő metódus aláírása
public IOutputFile Add(string path, Image image) Add(string path, IImage image)

ImageCollection

Metódus aláírása Helyettesítő metódus aláírása
IPPImage AddImage(Image image) AddImage(IImage image)

ImageWrapperFactory

Metódus aláírása Helyettesítő metódus aláírása
IImageWrapper CreateImageWrapper(Image image) CreateImageWrapper(IImage image)

PPImage

Metódus/Tulajdonság aláírása Helyettesítő metódus aláírása
void ReplaceImage(Image newImage) ReplaceImage(IImage newImage)
Image SystemImage { get; } IImage Image { get; }

PatternFormat

Metódus aláírása Helyettesítő metódus aláírása
Bitmap GetTileImage(Color background, Color foreground) GetTile(Color background, Color foreground)
Bitmap GetTileImage(Color styleColor) GetTile(Color styleColor)

IPatternFormatEffectiveData

Metódus aláírása Helyettesítő metódus aláírása
Bitmap GetTileImage(Color background, Color foreground) GetTileIImage(SlidesImage image)

API támogatás a Graphics és a PrinterSettings számára

A Graphics osztály nem támogatott a .NET6 és újabb platformfüggetlen verzióiban. Az Aspose Slides‑ben használja a Modern API képrenderelő metódusait a Graphics felé renderelő API helyett: ISlide

Emellett a PrinterSettings használatával kapcsolatos API-nak nincs közvetlen Modern API helyettesítője:

IPresentation:

GYIK

Miért lett eltávolítva a Graphics?

A Graphics támogatása elavult a nyilvános API-ban, hogy egységesítsük a renderelést és a képek kezelését, megszüntessük a platformfüggő függőségeket, és egy platformfüggetlen megközelítést alkalmazzunk a IImage segítségével. Használja a GetImage vagy a GetImages metódusokat a Graphics helyett.

Mi a gyakorlati előnye a IImage használatának a Image/Bitmap helyett?

Az IImage egyesíti a raszteres és vektorgrafikus képek kezelését, egyszerűsíti a különböző formátumokba való mentést a ImageFormat használatával, csökkenti a System.Drawing függőséget, és kódot tesz hordozhatóbbá a különböző környezetek között.

Hatással lesz a Modern API a bélyegképek generálásának teljesítményére?

A GetThumbnail‑ról a GetImage‑re való átállás nem rontja a teljesítményt: az új metódusok ugyanazokat a képalkotási lehetőségeket és méreteket biztosítják, miközben megtartják a renderelési opciók támogatását. A konkrét nyereség vagy veszteség a felhasználási esetektől függ, de funkcionálisan a helyettesítések egyenértékűek.