Анимированный PNG (Portable Network Graphics) — это расширение формата PNG, включающее анимацию. Так же, как анимированные GIF-файлы, формат APNG используется для представления анимации. Преимущество APNG над GIF заключается в том, что он поддерживает 24-битную прозрачность, тогда как GIF поддерживает только 8-битную. Кроме того, APNG обеспечивает более плавную анимацию по сравнению с анимированным GIF. В этой статье я покажу вам, как создавать анимированные изображения PNG (APNG) из изображения или многостраничного файла Tiff и программно экспортировать APNG в анимированный GIF с помощью C# (или VB.NET).
- .NET API для анимированных изображений PNG
- Создание анимированного PNG из изображения
- Создать анимированный PNG из многостраничного файла Tiff
- Экспорт анимированного PNG в анимированный GIF
.NET API для анимированных изображений PNG
Aspose предлагает свой .NET Imaging API для создания или управления популярными форматами изображений, включая анимированный PNG, с использованием C# или VB.NET. Мы будем использовать возможности Aspose.Imaging for .NET для создания или экспорта анимированных изображений PNG. Вы можете либо загрузить библиотеку DLL API, либо установить ее в своем приложении .NET с помощью NuGet.
PM> Install-Package Aspose.Imaging
Создание анимированного PNG из изображения с помощью C#
Aspose.Imaging for .NET позволяет создавать анимированный PNG из одностраничного изображения, такого как PNG, задав пользовательскую анимацию и продолжительность кадра. Ниже приведены шаги для выполнения этой операции.
- Загрузите изображение PNG в объект RasterImage с помощью метода Image.Load(String).
- Установите свойства ApngOptions в соответствии с вашими требованиями.
- Используйте класс ApngImage для создания анимированного PNG.
- Обновите гамму каждого кадра с помощью метода ApngFrame.AdjustGamma(Single).
- Создайте анимированный PNG с помощью метода ApngImage.Save().
В следующем примере кода показано, как создать анимированный PNG (APNG) из изображения PNG с помощью C#.
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();
}
}
Создание анимированного PNG из многостраничного Tiff с помощью C#
Вы также можете использовать многостраничный файл Tiff для создания анимированного PNG, установив желаемое время кадра. Ниже приведены шаги для создания анимированного PNG из файла Tiff.
- Загрузите изображение Tiff в объект класса Image.
- Сохраните Tiff как APNG, используя метод Image.Save(String, ImageOptionsBase).
В следующем примере кода показано, как создать анимированный PNG из файла Tiff с помощью C#.
// Пример 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
}
Исходный тифф
Анимированный PNG
Экспорт анимированного PNG в анимированный GIF с использованием C#
Вы также можете экспортировать анимированное изображение PNG в эквивалентный анимированный GIF. Ниже приведены шаги для экспорта APNG в GIF.
- Загрузите анимированный PNG в объект Image.
- Экспортируйте APNG в GIF, используя метод Image.Save(String, GifOptions()).
В следующем примере кода показано, как экспортировать анимированный PNG в GIF с помощью C#.
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
Вывод
В этой статье вы узнали, как создать анимированный PNG из разных источников с помощью C#. В пошаговом руководстве и примерах кода показано, как создать анимированный PNG из одностраничного PNG и многостраничного Tiff, а также экспортировать анимированный PNG в анимированный GIF с помощью C#. Вы можете узнать больше об управлении изображениями APNG, используя документацию по API.