动画 PNG(便携式网络图形)是 PNG 格式的扩展,用于合并动画。就像动画 GIF 一样,APNG 格式用于呈现动画。 APNG 优于 GIF 的一个优势是,它支持 24 位透明度,而 GIF 仅支持 8 位。此外,与动画 GIF 相比,APNG 提供了更流畅的动画。在本文中,我将向您展示如何从图像或多页 Tiff 创建动画 PNG (APNG) 图像,并使用 C#(或 VB.NET)以编程方式将 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。分步指南和代码示例演示了如何从单页 PNG 和多页 Tiff 创建动画 PNG,以及如何使用 C# 将动画 PNG 导出为动画 GIF。您可以使用 API 文档了解有关操作 APNG 图像的更多信息。

也可以看看