Animated PNG (Portable Network Graphics) to rozszerzenie formatu PNG w celu uwzględnienia animacji. Podobnie jak animowane pliki GIF, do prezentacji animacji używany jest format APNG. Przewagą APNG nad GIF jest to, że obsługuje 24-bitową przezroczystość, podczas gdy GIF obsługuje tylko 8-bitową. Ponadto APNG zapewnia płynniejszą animację w porównaniu z animowanym GIF-em. W tym artykule pokażę, jak utworzyć animowane obrazy PNG (APNG) z obrazu lub wielostronicowego Tiffa i programowo wyeksportować APNG do animowanego GIF-a za pomocą C# (lub VB.NET).

Interfejs API .NET dla animowanych obrazów PNG

Aspose oferuje swój .NET Imaging API do tworzenia lub manipulowania popularnymi formatami obrazów, w tym animowanym PNG, przy użyciu C# lub VB.NET. Wykorzystamy możliwości Aspose.Imaging for .NET do tworzenia lub eksportowania animowanych obrazów PNG. Możesz pobrać bibliotekę DLL interfejsu API lub zainstalować ją w swojej aplikacji .NET przy użyciu NuGet.

PM> Install-Package Aspose.Imaging

Utwórz animowany plik PNG z obrazu za pomocą C#

Aspose.Imaging dla platformy .NET umożliwia tworzenie animowanych obrazów PNG z obrazu jednostronicowego, takiego jak PNG, poprzez ustawienie niestandardowej animacji i czasu trwania klatki. Poniżej przedstawiono kroki, aby wykonać tę operację.

Poniższy przykładowy kod pokazuje, jak utworzyć animowany plik PNG (APNG) z obrazu PNG przy użyciu języka 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();

        // dodaj pierwszą klatkę
        apngImage.AddFrame(sourceImage, FrameDuration);

        // dodaj ramki pośrednie
       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);
        }

        // dodaj ostatnią klatkę
        apngImage.AddFrame(sourceImage, FrameDuration);

        apngImage.Save();
    }
}

Utwórz animowany PNG z wielostronicowego Tiffa za pomocą C#

Możesz także użyć wielostronicowego pliku Tiff, aby utworzyć animowany plik PNG, ustawiając żądany czas klatki. Poniżej przedstawiono kroki tworzenia animowanego PNG z pliku Tiff.

Poniższy przykładowy kod pokazuje, jak utworzyć animowany plik PNG z pliku Tiff przy użyciu języka C#.

// Przykład 4. Eksport do formatu pliku APNG z innego formatu nieanimowanego
using Aspose.Imaging;
using Aspose.Imaging.ImageOptions;

using (Image image = Image.Load("img4.tif")) {
    // Ustawianie domyślnego czasu trwania klatki
    image.Save("img4.tif.500ms.png", new ApngOptions() { DefaultFrameTime = 500 }); // 500 ms
    image.Save("img4.tif.250ms.png", new ApngOptions() { DefaultFrameTime = 250 }); // 250 ms
}

Źródło Tiff

Tiff źródłowy

Animowane PNG

TIFF do animowanego PNG

Eksportuj animowany PNG do animowanego GIF-a za pomocą C#

Możesz także wyeksportować animowany obraz PNG do równoważnego animowanego pliku GIF. Poniżej przedstawiono kroki, aby wyeksportować plik APNG do formatu GIF.

Poniższy przykładowy kod pokazuje, jak wyeksportować animowany plik PNG do formatu GIF przy użyciu języka C#.

using System.Diagnostics;
using Aspose.Imaging;
using Aspose.Imaging.ImageOptions;
using Aspose.Imaging.FileFormats.Apng;

using (Image image = Image.Load("elephant.png")) {
    // Sprawdzanie typu załadowanego obrazu
    Debug.Assert(image is ApngImage);
    // Zapisz w tym samym formacie
    image.Save("elephant_same_format.png");
    // Eksportuj do innego animowanego formatu
    image.Save("elephant.png.gif", new GifOptions());
}

Źródło animowanego PNG

Animowany obraz PNG

Animowany gif

Animowane PNG do GIF C#

Wniosek

W tym artykule nauczyłeś się, jak tworzyć animowane pliki PNG z różnych źródeł przy użyciu języka C#. Przewodnik krok po kroku i przykłady kodu pokazały, jak utworzyć animowany plik PNG z jednostronicowego pliku PNG i wielostronicowego pliku Tiff, a także wyeksportować animowany plik PNG do animowanego pliku GIF za pomocą języka C#. Więcej informacji na temat manipulowania obrazami APNG można znaleźć w dokumentacji interfejsu API.

Zobacz też