动画 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。以下是执行此操作的步骤。
- 使用 Image.Load(String) 方法将 PNG 图像加载到 RasterImage 对象中。
- 根据您的要求设置 ApngOptions 属性。
- 使用 ApngImage 类创建动画 PNG。
- 使用 ApngFrame.AdjustGamma(Single) 方法更新每一帧的 gamma。
- 使用 ApngImage.Save() 方法创建动画 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 的步骤。
- 在 Image 类的对象中加载 Tiff 图像。
- 使用 Image.Save(String, ImageOptionsBase) 方法将 Tiff 保存为 APNG。
以下代码示例展示了如何使用 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
动画 PNG
使用 C# 将动画 PNG 导出为动画 GIF
您还可以将动画 PNG 图像导出为等效的动画 GIF。以下是将 APNG 导出为 GIF 的步骤。
- 将动画 PNG 加载到 Image 对象中。
- 使用 Image.Save(String, GifOptions()) 方法将 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
动画 GIF
结论
在本文中,您学习了如何使用 C# 从不同的源创建动画 PNG。分步指南和代码示例演示了如何从单页 PNG 和多页 Tiff 创建动画 PNG,以及如何使用 C# 将动画 PNG 导出为动画 GIF。您可以使用 API 文档了解有关操作 APNG 图像的更多信息。