PNG Animado (Portable Network Graphics) é uma extensão do formato PNG para incorporar as animações. Assim como os GIFs animados, o formato APNG é usado para apresentar as animações. Uma vantagem do APNG sobre o GIF é que ele suporta transparência de 24 bits, enquanto o GIF suporta apenas 8 bits. Além disso, o APNG fornece uma animação mais suave em comparação com um GIF animado. Neste artigo, mostrarei como criar imagens animadas PNG (APNG) a partir de uma imagem ou Tiff de várias páginas e exportar APNG para GIF animado programaticamente usando C# (ou VB.NET).

API .NET para imagens PNG animadas

A Aspose oferece sua .NET Imaging API para criar ou manipular formatos de imagem populares, incluindo PNG animado usando C# ou VB.NET. Aproveitaremos os recursos do Aspose.Imaging for .NET para criar ou exportar imagens PNG animadas. Você pode baixar a DLL da API ou instalá-la em seu aplicativo .NET usando NuGet.

PM> Install-Package Aspose.Imaging

Criar PNG animado de uma imagem usando C#

O Aspose.Imaging para .NET permite que você crie um PNG animado a partir de uma imagem de página única, como PNG, definindo a animação personalizada e a duração do quadro. A seguir estão as etapas para realizar esta operação.

O exemplo de código a seguir mostra como criar um PNG animado (APNG) de uma imagem PNG usando 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();

        // adicionar primeiro quadro
        apngImage.AddFrame(sourceImage, FrameDuration);

        // adicionar quadros intermediários
        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);
        }

        // adicionar último quadro
        apngImage.AddFrame(sourceImage, FrameDuration);

        apngImage.Save();
    }
}

Criar PNG animado de Tiff de várias páginas usando C#

Você também pode usar um arquivo Tiff de várias páginas para criar o PNG animado definindo o tempo de quadro desejado. A seguir estão as etapas para criar PNG animado a partir de um arquivo Tiff.

O exemplo de código a seguir mostra como criar PNG animado de um arquivo Tiff usando C#.

// Exemplo 4. Exportando para o formato de arquivo APNG de outro formato não animado
using Aspose.Imaging;
using Aspose.Imaging.ImageOptions;

using (Image image = Image.Load("img4.tif")) {
    // Configurando a duração padrão do quadro
    image.Save("img4.tif.500ms.png", new ApngOptions() { DefaultFrameTime = 500 }); // 500 ms
    image.Save("img4.tif.250ms.png", new ApngOptions() { DefaultFrameTime = 250 }); // 250 ms
}

Fonte Tiff

Source Tiff

PNG Animado

TIFF para PNG Animado

Exportar PNG animado para GIF animado usando C#

Você também pode exportar uma imagem PNG animada para um GIF animado equivalente. A seguir estão as etapas para exportar APNG para GIF.

O exemplo de código a seguir mostra como exportar PNG animado para GIF usando C#.

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

using (Image image = Image.Load("elephant.png")) {
    // Verificando o tipo de imagem carregada
    Debug.Assert(image is ApngImage);
    // Salvar no mesmo formato
    image.Save("elephant_same_format.png");
    // Exportar para outro formato animado
    image.Save("elephant.png.gif", new GifOptions());
}

Fonte Animada PNG

Imagem PNG Animada

Gif Animado

PNG animado para GIF C#

Conclusão

Neste artigo, você aprendeu como criar um PNG animado de diferentes fontes usando C#. O guia passo a passo e os exemplos de código demonstraram como criar PNG animado de PNG de página única e Tiff de várias páginas, bem como exportar PNG animado para um GIF animado usando C#. Você pode aprender mais sobre como manipular imagens APNG usando a documentação da API.

Veja também