Zlepšení zpracování obrázků pomocí Moderního API

Úvod

Historicky má Aspose Slides závislost na System.Drawing a v veřejném API obsahuje následující třídy z této knihovny:

Od verze 24.4 je toto veřejné API označeno jako zastaralé.

Jelikož podpora System.Drawing ve verzích .NET6 a vyšších byla odstraněna pro ne‑Windows verze (breaking change), Slides implementoval dvoubalíčkový přístup:

Nevýhodou Aspose.Slides.NET6.CrossPlatform je, že implementuje vlastní verzi System.Drawing ve stejném jmenném prostoru (kvůli zpětné kompatibilitě s veřejným API). Proto při současném použití Aspose.Slides.NET6.CrossPlatform a System.Drawing z .NET Framework nebo balíčku System.Drawing.Common dochází ke konfliktu názvů, pokud není použita aliasace.

Abychom se zbavili závislostí na System.Drawing v hlavním balíčku Aspose.Slides.NET, přidali jsme takzvané „Moderní API“ – tj. API, které má být použito místo zastaralého, jehož signatury obsahují závislosti na typech Image a Bitmap. PrinterSettings a Graphics jsou označeny jako zastaralé a jejich podpora je z veřejného API Slides odstraněna.

V současných verzích považujte veřejné API závislé na System.Drawing za legacy/zastaralé. Používejte Moderní API pro nový kód i při migraci existujících workflow zpracování obrázků.

Moderní API

Do veřejného API byly přidány následující třídy a výčty:

Všimněte si, že IImage je disposable (implementuje rozhraní IDisposable a jeho použití by mělo být obaleno pomocí using nebo uvolněno jiným vhodným způsobem).

Použijte GetImage pro vykreslení jedné snímku nebo tvaru. Použijte GetImages pro vykreslení několika snímků prezentace. Použijte metody Images k načtení obrázků, AddImage s IImage pro jejich přidání do prezentace a ReplaceImage s IImage pro aktualizaci existujícího obrázku v prezentaci.

Typický scénář použití nového API může vypadat následovně:

using (Presentation pres = new Presentation())
{
    IPPImage ppImage;
    // vytvořte odpadatelnou instanci IImage ze souboru na disku.  
    using (IImage image = Images.FromFile("image.png"))
    {
        // vytvořte obrázek PowerPoint tím, že přidáte instanci IImage do obrázků prezentace.
        ppImage = pres.Images.AddImage(image);
    }

    // přidejte obrázkový tvar na snímek #1
    pres.Slides[0].Shapes.AddPictureFrame(ShapeType.Rectangle, 10, 10, 100, 100, ppImage);

    // získáte instanci IImage představující snímek #1.
    using (var slideImage = pres.Slides[0].GetImage(new Size(1920, 1080)))
    {
        // uložte obrázek na disk.
        slideImage.Save("slide1.jpeg", ImageFormat.Jpeg);
    }
}

Nahrazení starého kódu moderním API

Pro usnadnění přechodu rozhraní nového IImage opakuje samostatné signatury tříd Image a Bitmap. V podstatě stačí nahradit volání staré metody používající System.Drawing novou.

Získání miniatury snímku

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

Získání miniatury tvaru

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

Získání miniatury prezentace

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

Přidání obrázku do prezentace

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

Zastaralé metody/vlastnosti a jejich náhrada v moderním API

Presentation

Podpis metody Podpis nahrazující metody
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) Žádná náhrada v moderním API
public void Save(string fname, SaveFormat format, ISaveOptions options, HttpResponse response, bool showInline) Žádná náhrada v moderním API
public void Print() Žádná náhrada v moderním API
public void Print(PrinterSettings printerSettings) Žádná náhrada v moderním API
public void Print(string printerName) Žádná náhrada v moderním API
public void Print(PrinterSettings printerSettings, string presName) Žádná náhrada v moderním API

Shape

Podpis metody Podpis nahrazující metody
public Bitmap GetThumbnail() GetImage
public Bitmap GetThumbnail(ShapeThumbnailBounds bounds, float scaleX, float scaleY) GetImage(ShapeThumbnailBounds bounds, float scaleX, float scaleY)

Slide

Podpis metody Podpis nahrazující metody
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) Žádná náhrada v moderním API
public void RenderToGraphics(IRenderingOptions options, Graphics graphics, float scaleX, float scaleY) Žádná náhrada v moderním API
public void RenderToGraphics(IRenderingOptions options, Graphics graphics, Size renderingSize) Žádná náhrada v moderním API

Output

Podpis metody Podpis nahrazující metody
public IOutputFile Add(string path, Image image) Add(string path, IImage image)

ImageCollection

Podpis metody Podpis nahrazující metody
IPPImage AddImage(Image image) AddImage(IImage image)

ImageWrapperFactory

Podpis metody Podpis nahrazující metody
IImageWrapper CreateImageWrapper(Image image) CreateImageWrapper(IImage image)

PPImage

Podpis metody/vlastnosti Podpis nahrazující metody
void ReplaceImage(Image newImage) ReplaceImage(IImage newImage)
Image SystemImage { get; } IImage Image { get; }

PatternFormat

Podpis metody Podpis nahrazující metody
Bitmap GetTileImage(Color background, Color foreground) GetTile(Color background, Color foreground)
Bitmap GetTileImage(Color styleColor) GetTile(Color styleColor)

IPatternFormatEffectiveData

Podpis metody Podpis nahrazující metody
Bitmap GetTileImage(Color background, Color foreground) GetTileIImage(SlidesImage image)

Podpora API pro Graphics a PrinterSettings

Třída Graphics není podporována pro cross‑platform verze .NET6 a novější. V Aspose Slides použijte metody renderování obrázků Moderního API místo API, které renderuje do Graphics: ISlide

Také API související s tiskem přes PrinterSettings nemá přímou náhradu v Moderním API:

IPresentation:

Často kladené otázky

Proč bylo Graphics odstraněno?

Podpora Graphics je v veřejném API označena jako zastaralá, aby se sjednotila práce s renderováním a obrázky, eliminovaly se vazby na platformně specifické závislosti a přešlo se na cross‑platform přístup s IImage. Používejte GetImage nebo GetImages místo renderování do Graphics.

Jaký je praktický přínos IImage oproti Image/Bitmap?

IImage sjednocuje práci s rastrovými i vektorovými obrázky, zjednodušuje ukládání do různých formátů pomocí ImageFormat, snižuje závislost na System.Drawing a činí kód přenosnějším mezi prostředími.

Ovlivní Moderní API výkon při generování miniatur?

Přepnutí z GetThumbnail na GetImage výkon nesnižuje. Nové metody nabízejí stejné možnosti tvorby obrázků s volbami a velikostmi a zachovávají podporu pro renderovací možnosti. Konkrétní zisk či pokles výkonu závisí na scénáři, ale funkčně jsou náhrady ekvivalentní.