動畫 PNG(便攜式網絡圖形)是 PNG 格式的擴展,用於合併動畫。就像動畫 GIF 一樣,APNG 格式用於呈現動畫。 APNG 優於 GIF 的一個優勢是,它支持 24 位透明度,而 GIF 僅支持 8 位。此外,與動畫 GIF 相比,APNG 提供更流暢的動畫。在本文中,我將向您展示如何使用 C#(或 VB.NET)以編程方式從圖像或多頁 Tiff 創建動畫 PNG (APNG) 圖像並將 APNG 導出為動畫 GIF。

用於動畫 PNG 圖像的 .NET API

Aspose 提供其 .NET Imaging API 來創建或操作流行的圖像格式,包括使用 C# 或 VB.NET 的動畫 PNG。我們將利用 Aspose.Imaging for .NET 的功能來創建或導出動畫 PNG 圖像。您可以 下載 API 的 DLL 或使用 NuGet 在您的 .NET 應用程序中安裝它。

PM> Install-Package Aspose.Imaging

使用 C# 從圖像創建動畫 PNG

Aspose.Imaging for .NET 允許您通過設置自定義動畫和幀持續時間從單頁圖像(例如 PNG)創建動畫 PNG。以下是執行此操作的步驟。

以下代碼示例演示如何使用 C# 從 PNG 圖像創建動畫 PNG (APNG)。

using Aspose.Imaging;
using Aspose.Imaging.ImageOptions;
using Aspose.Imaging.FileFormats.Apng;

const int AnimationDuration = 1000; // 1 s
const int FrameDuration = 70; // 70 ms
using (RasterImage sourceImage = (RasterImage)Image.Load("not_animated.png"))
{
    ApngOptions createOptions = new ApngOptions
    {
        Source = new FileCreateSource("raster_animation.png", false),
        DefaultFrameTime = (uint)FrameDuration,
        ColorType = PngColorType.TruecolorWithAlpha,
    };

    using (ApngImage apngImage = (ApngImage)Image.Create(
        createOptions,
        sourceImage.Width,
        sourceImage.Height))
    {
        int numOfFrames = AnimationDuration / FrameDuration;
        int numOfFrames2 = numOfFrames / 2;

        apngImage.RemoveAllFrames();

        // 添加第一幀
        apngImage.AddFrame(sourceImage, FrameDuration);

        // 添加中間幀
       for (int frameIndex = 1; frameIndex < numOfFrames - 1; ++frameIndex)
        {
            apngImage.AddFrame(sourceImage, FrameDuration);
            ApngFrame lastFrame = (ApngFrame)apngImage.Pages[apngImage.PageCount - 1];
            float gamma = frameIndex >= numOfFrames2 ? numOfFrames - frameIndex - 1 : frameIndex;
            lastFrame.AdjustGamma(gamma);
        }

        // 添加最後一幀
        apngImage.AddFrame(sourceImage, FrameDuration);

        apngImage.Save();
    }
}

使用 C# 從多頁 Tiff 創建動畫 PNG

您還可以使用多頁 Tiff 文件通過設置所需的幀時間來創建動畫 PNG。以下是從 Tiff 文件創建動畫 PNG 的步驟。

以下代碼示例展示瞭如何使用 C# 從 Tiff 文件創建動畫 PNG。

// 示例 4. 從其他非動畫格式導出為 APNG 文件格式
using Aspose.Imaging;
using Aspose.Imaging.ImageOptions;

using (Image image = Image.Load("img4.tif")) {
    // 設置默認幀持續時間
    image.Save("img4.tif.500ms.png", new ApngOptions() { DefaultFrameTime = 500 }); // 500 ms
    image.Save("img4.tif.250ms.png", new ApngOptions() { DefaultFrameTime = 250 }); // 250 ms
}

來源 Tiff

源 Tiff

動畫PNG

TIFF 到動畫 PNG

使用 C# 將動畫 PNG 導出為動畫 GIF

您還可以將動畫 PNG 圖像導出為等效的動畫 GIF。以下是將 APNG 導出為 GIF 的步驟。

以下代碼示例展示瞭如何使用 C# 將動畫 PNG 導出為 GIF。

using System.Diagnostics;
using Aspose.Imaging;
using Aspose.Imaging.ImageOptions;
using Aspose.Imaging.FileFormats.Apng;

using (Image image = Image.Load("elephant.png")) {
    // 檢查加載圖像的類型
    Debug.Assert(image is ApngImage);
    // 保存為相同格式
    image.Save("elephant_same_format.png");
    // 導出為其他動畫格式
    image.Save("elephant.png.gif", new GifOptions());
}

源動畫 PNG

動畫 PNG 圖像

動畫 GIF

動畫 PNG 到 GIF C#

結論

在本文中,您學習瞭如何使用 C# 從不同來源創建動畫 PNG。分步指南和代碼示例演示瞭如何使用 C# 從單頁 PNG 和多頁 Tiff 創建動畫 PNG 以及將動畫 PNG 導出為動畫 GIF。您可以使用 API 文檔了解更多關於操作 APNG 圖像的信息。

也可以看看