Animated PNG (Portable Network Graphics) è un’estensione del formato PNG per incorporare le animazioni. Proprio come le GIF animate, il formato APNG viene utilizzato per presentare le animazioni. Un vantaggio di APNG su GIF è che supporta la trasparenza a 24 bit mentre GIF supporta solo 8 bit. Inoltre, APNG fornisce un’animazione più fluida rispetto a una GIF animata. In questo articolo, ti mostrerò come creare immagini PNG animate (APNG) da un’immagine o un Tiff multipagina ed esportare APNG in GIF animate a livello di codice usando C# (o VB.NET).

API .NET per immagini PNG animate

Aspose offre la sua .NET Imaging API per creare o manipolare i formati di immagine più diffusi, inclusi i PNG animati, utilizzando C# o VB.NET. Sfrutteremo le capacità di Aspose.Imaging per .NET per creare o esportare immagini PNG animate. Puoi scaricare la DLL dell’API o installarla all’interno della tua applicazione .NET usando NuGet.

PM> Install-Package Aspose.Imaging

Crea PNG animato da un’immagine usando C#

Aspose.Imaging per .NET ti consente di creare un PNG animato da un’immagine a pagina singola come PNG impostando l’animazione personalizzata e la durata del fotogramma. Di seguito sono riportati i passaggi per eseguire questa operazione.

L’esempio di codice seguente mostra come creare un PNG animato (APNG) da un’immagine 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();

        // aggiungi il primo fotogramma
        apngImage.AddFrame(sourceImage, FrameDuration);

        // aggiungere cornici intermedie
        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);
        }

        // aggiungi l'ultimo fotogramma
        apngImage.AddFrame(sourceImage, FrameDuration);

        apngImage.Save();
    }
}

Crea PNG animato da Tiff multipagina usando C#

Puoi anche utilizzare un file Tiff multipagina per creare il PNG animato impostando il frame time desiderato. Di seguito sono riportati i passaggi per creare PNG animati da un file Tiff.

L’esempio di codice seguente mostra come creare PNG animato da un file Tiff usando C#.

// Esempio 4. Esportazione in formato file APNG da un altro formato non animato
using Aspose.Imaging;
using Aspose.Imaging.ImageOptions;

using (Image image = Image.Load("img4.tif")) {
    // Impostazione della durata del frame predefinita
    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

[Tiff sorgente](immagini/Tiff.tif multipagina)

PNG animato

TIFF in PNG animato

Esporta PNG animato in GIF animato usando C#

Puoi anche esportare un’immagine PNG animata in una GIF animata equivalente. Di seguito sono riportati i passaggi per esportare APNG in GIF.

L’esempio di codice seguente mostra come esportare PNG animato in 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")) {
    // Verifica del tipo di immagine caricata
    Debug.Assert(image is ApngImage);
    // Salva nello stesso formato
    image.Save("elephant_same_format.png");
    // Esporta nell'altro formato animato
    image.Save("elephant.png.gif", new GifOptions());
}

Sorgente PNG animato

Immagine PNG animata

GIF animate

PNG animato in GIF C#

Conclusione

In questo articolo, hai imparato come creare un PNG animato da diverse fonti usando C#. La guida passo passo e gli esempi di codice hanno dimostrato come creare PNG animati da PNG a pagina singola e Tiff a più pagine, nonché come esportare PNG animati in una GIF animata usando C#. Puoi saperne di più sulla manipolazione delle immagini APNG utilizzando la documentazione dell’API.

Guarda anche