Анимированный 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

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.

В следующем примере кода показано, как создать анимированный 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
}

Исходный тифф

Исходный Tiff

Анимированный PNG

TIFF в анимированный PNG

Экспорт анимированного PNG в анимированный GIF с использованием C#

Вы также можете экспортировать анимированное изображение PNG в эквивалентный анимированный GIF. Ниже приведены шаги для экспорта APNG в GIF.

В следующем примере кода показано, как экспортировать анимированный 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

Анимированное изображение PNG

Анимированный GIF

Анимированный PNG в GIF C#

Вывод

В этой статье вы узнали, как создать анимированный PNG из разных источников с помощью C#. В пошаговом руководстве и примерах кода показано, как создать анимированный PNG из одностраничного PNG и многостраничного Tiff, а также экспортировать анимированный PNG в анимированный GIF с помощью C#. Вы можете узнать больше об управлении изображениями APNG, используя документацию по API.

Смотрите также