PNG animado (Portable Network Graphics) es una extensión del formato PNG para incorporar las animaciones. Al igual que los GIF animados, se utiliza el formato APNG para presentar las animaciones. Una ventaja de APNG sobre GIF es que admite transparencia de 24 bits, mientras que GIF solo admite 8 bits. Además, APNG proporciona una animación más fluida en comparación con un GIF animado. En este artículo, le mostraré cómo crear imágenes animadas PNG (APNG) a partir de una imagen o Tiff de varias páginas y exportar APNG a GIF animado mediante programación usando C# (o VB.NET).

.NET API para imágenes PNG animadas

Aspose ofrece su API de imágenes .NET para crear o manipular formatos de imagen populares, incluido PNG animado, usando C# o VB.NET. Aprovecharemos las capacidades de Aspose.Imaging for .NET para crear o exportar imágenes PNG animadas. Puede descargar la DLL de la API o instalarla dentro de su aplicación .NET usando NuGet.

PM> Install-Package Aspose.Imaging

Crear PNG animado a partir de una imagen usando C#

Aspose.Imaging for .NET le permite crear un PNG animado a partir de una imagen de una sola página, como PNG, configurando la animación personalizada y la duración del cuadro. Los siguientes son los pasos para realizar esta operación.

El siguiente ejemplo de código muestra cómo crear un PNG animado (APNG) a partir de una imagen PNG mediante 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();

        // añadir primer cuadro
        apngImage.AddFrame(sourceImage, FrameDuration);

        // agregar marcos intermedios
        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);
        }

        // agregar el último cuadro
        apngImage.AddFrame(sourceImage, FrameDuration);

        apngImage.Save();
    }
}

Cree PNG animados a partir de Tiff de varias páginas usando C#

También puede usar un archivo Tiff de varias páginas para crear el PNG animado configurando el marco de tiempo deseado. Los siguientes son los pasos para crear PNG animados a partir de un archivo Tiff.

El siguiente ejemplo de código muestra cómo crear PNG animado a partir de un archivo Tiff usando C#.

// Ejemplo 4. Exportación a formato de archivo APNG desde otro formato no animado
using Aspose.Imaging;
using Aspose.Imaging.ImageOptions;

using (Image image = Image.Load("img4.tif")) {
    // Configuración de la duración del marco predeterminado
    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 de origen

Fuente Tiff

PNG animado

TIFF a PNG animado

Exportar PNG animado a GIF animado usando C#

También puede exportar una imagen PNG animada a un GIF animado equivalente. Los siguientes son los pasos para exportar APNG a GIF.

El siguiente ejemplo de código muestra cómo exportar PNG animado a 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")) {
    // Comprobación del tipo de imagen cargada
    Debug.Assert(image is ApngImage);
    // Guardar en el mismo formato
    image.Save("elephant_same_format.png");
    // Exportar al otro formato animado
    image.Save("elephant.png.gif", new GifOptions());
}

PNG animado fuente

Imagen PNG animada

GIF animado

PNG animado a GIF C#

Conclusión

En este artículo, ha aprendido a crear un PNG animado a partir de diferentes fuentes usando C#. La guía paso a paso y los ejemplos de código demostraron cómo crear PNG animados a partir de PNG de una sola página y Tiff de varias páginas, así como exportar PNG animados a un GIF animado usando C#. Puede obtener más información sobre la manipulación de imágenes APNG utilizando la documentación de la API.

Ver también