Tingkatkan Pemrosesan Gambar dengan API Modern

Pendahuluan

Secara historis, Aspose Slides memiliki ketergantungan pada System.Drawing dan memiliki di API publik kelas-kelas berikut dari sana:

Mulai versi 24.4, API publik ini dinyatakan tidak direkomendasikan.

Karena dukungan System.Drawing pada versi .NET6 dan yang lebih tinggi dihapus untuk versi non‑Windows (perubahan breaking), Slides telah mengimplementasikan pendekatan dua paket:

Ketidaknyamanan dari Aspose.Slides.NET6.CrossPlatform adalah bahwa ia mengimplementasikan versi System.Drawing sendiri dalam namespace yang sama (untuk mendukung kompatibilitas mundur dengan API publik). Jadi, ketika Aspose.Slides.NET6.CrossPlatform dan System.Drawing dari .NET Framework atau paket System.Drawing.Common digunakan bersamaan, terjadilah konflik nama kecuali alias digunakan.

Untuk menghilangkan ketergantungan pada System.Drawing di paket utama Aspose.Slides.NET, kami menambahkan yang disebut “Modern API” – yaitu API yang harus digunakan menggantikan yang tidak direkomendasikan, yang tanda tangannya berisi ketergantungan pada tipe-tipe berikut dari System.Drawing: Image dan Bitmap. PrinterSettings dan Graphics dinyatakan tidak direkomendasikan dan dukungannya dihapus dari API Slides publik.

Dalam versi terkini, anggap API publik yang bergantung pada System.Drawing sebagai warisan/tidak direkomendasikan. Gunakan Modern API untuk kode baru dan saat memigrasi alur kerja pemrosesan gambar yang ada.

API Modern

Ditambahkan kelas dan enum berikut ke API publik:

Harap dicatat bahwa IImage dapat dibuang (menerapkan antarmuka IDisposable dan penggunaannya harus dibungkus dalam using atau dibuang dengan cara yang lain).

Gunakan GetImage untuk merender satu slide atau shape. Gunakan GetImages untuk merender beberapa slide presentasi. Gunakan metode Images untuk memuat gambar, AddImage dengan IImage untuk menambahkannya ke presentasi, dan ReplaceImage dengan IImage untuk memperbarui gambar presentasi yang ada.

Skenario tipikal penggunaan API baru dapat terlihat seperti berikut:

using (Presentation pres = new Presentation())
{
    IPPImage ppImage;
    // instansiasikan instance IImage yang dapat dibuang dari file di disk.  
    using (IImage image = Images.FromFile("image.png"))
    {
        // buat gambar PowerPoint dengan menambahkan instance IImage ke gambar presentasi.
        ppImage = pres.Images.AddImage(image);
    }

    // tambahkan shape gambar pada slide #1
    pres.Slides[0].Shapes.AddPictureFrame(ShapeType.Rectangle, 10, 10, 100, 100, ppImage);

    // dapatkan instance IImage yang merepresentasikan slide #1.
    using (var slideImage = pres.Slides[0].GetImage(new Size(1920, 1080)))
    {
        // simpan gambar di disk.
        slideImage.Save("slide1.jpeg", ImageFormat.Jpeg);
    }
}

Menggantikan Kode Lama dengan API Modern

Untuk memudahkan transisi, antarmuka IImage meniru tanda tangan terpisah dari kelas Image dan Bitmap. Secara umum, Anda hanya perlu mengganti pemanggilan metode lama yang menggunakan System.Drawing dengan yang baru.

Mendapatkan Thumbnail Slide

API lama/tidak direkomendasikan:

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

API Modern:

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

Mendapatkan Thumbnail Shape

API lama/tidak direkomendasikan:

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

API Modern:

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

Mendapatkan Thumbnail Presentasi

API lama/tidak direkomendasikan:

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 Modern:

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

Menambahkan Gambar ke Presentasi

API lama/tidak direkomendasikan:

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 Modern:

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

Metode/Properti yang Tidak Direkomendasikan dan Penggantinya di API Modern

Presentation

Tanda Tangan Metode Tanda Tangan Metode Pengganti
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

Tanda Tangan Metode Tanda Tangan Metode Pengganti
public Bitmap GetThumbnail() GetImage
public Bitmap GetThumbnail(ShapeThumbnailBounds bounds, float scaleX, float scaleY) GetImage(ShapeThumbnailBounds bounds, float scaleX, float scaleY)

Slide

Tanda Tangan Metode Tanda Tangan Metode Pengganti
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

Tanda Tangan Metode Tanda Tangan Metode Pengganti
public IOutputFile Add(string path, Image image) Add(string path, IImage image)

ImageCollection

Tanda Tangan Metode Tanda Tangan Metode Pengganti
IPPImage AddImage(Image image) AddImage(IImage image)

ImageWrapperFactory

Tanda Tangan Metode Tanda Tangan Metode Pengganti
IImageWrapper CreateImageWrapper(Image image) CreateImageWrapper(IImage image)

PPImage

Tanda Tangan Metode/Properti Tanda Tangan Metode Pengganti
void ReplaceImage(Image newImage) ReplaceImage(IImage newImage)
Image SystemImage { get; } IImage Image { get; }

PatternFormat

Tanda Tangan Metode Tanda Tangan Metode Pengganti
Bitmap GetTileImage(Color background, Color foreground) GetTile(Color background, Color foreground)
Bitmap GetTileImage(Color styleColor) GetTile(Color styleColor)

IPatternFormatEffectiveData

Tanda Tangan Metode Tanda Tangan Metode Pengganti
Bitmap GetTileImage(Color background, Color foreground) GetTileIImage(SlidesImage image)

Dukungan API untuk Graphics dan PrinterSettings

Kelas Graphics tidak didukung untuk versi lintas‑platform .NET6 dan yang lebih tinggi. Di Aspose Slides, gunakan metode rendering gambar Modern API alih‑alih API yang merender ke Graphics: ISlide

Selain itu, API yang terkait dengan pencetakan melalui PrinterSettings tidak memiliki pengganti Modern API yang langsung:

IPresentation:

FAQ

Mengapa Graphics dihapus?

Dukungan untuk Graphics tidak direkomendasikan dalam API publik untuk menyatukan kerja dengan rendering dan gambar, menghilangkan ketergantungan pada platform spesifik, dan beralih ke pendekatan lintas‑platform dengan IImage. Gunakan GetImage atau GetImages alih‑alih merender ke Graphics.

Apa manfaat praktis dari IImage dibandingkan Image/Bitmap?

IImage menyatukan kerja dengan gambar raster dan vektor, menyederhanakan penyimpanan ke berbagai format melalui ImageFormat, mengurangi ketergantungan pada System.Drawing, dan membuat kode lebih portabel di berbagai lingkungan.

Apakah Modern API akan memengaruhi kinerja pembuatan thumbnail?

Berpindah dari GetThumbnail ke GetImage tidak memperburuk skenario: metode baru memberikan kemampuan yang sama untuk menghasilkan gambar dengan opsi dan ukuran, sambil tetap mendukung opsi rendering. Keuntungan atau penurunan spesifik tergantung pada skenario, namun secara fungsional pengganti tersebut setara.