Animated 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

Джерело 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.

Дивись також