Animated PNG (Portable Network Graphics) est une extension du format PNG pour incorporer les animations. Tout comme les GIF animés, le format APNG est utilisé pour présenter les animations. Un avantage d’APNG sur GIF est qu’il prend en charge la transparence 24 bits alors que GIF ne prend en charge que 8 bits. De plus, APNG fournit une animation plus fluide par rapport à un GIF animé. Dans cet article, je vais vous montrer comment créer des images PNG animées (APNG) à partir d’une image ou d’un Tiff multipage et exporter APNG vers un GIF animé par programme à l’aide de C# (ou VB.NET).

API .NET pour les images PNG animées

Aspose propose son .NET Imaging API pour créer ou manipuler des formats d’image populaires, y compris le PNG animé à l’aide de C# ou VB.NET. Nous tirerons parti des capacités d’Aspose.Imaging for .NET pour créer ou exporter des images PNG animées. Vous pouvez soit télécharger la DLL de l’API, soit l’installer dans votre application .NET à l’aide de NuGet.

PM> Install-Package Aspose.Imaging

Créer un PNG animé à partir d’une image à l’aide de C#

Aspose.Imaging for .NET vous permet de créer un PNG animé à partir d’une image d’une seule page telle que PNG en définissant l’animation personnalisée et la durée de l’image. Voici les étapes pour effectuer cette opération.

L’exemple de code suivant montre comment créer un PNG animé (APNG) à partir d’une image PNG à l’aide de 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();

        // ajouter la première image
        apngImage.AddFrame(sourceImage, FrameDuration);

        // ajouter des cadres intermédiaires
        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);
        }

        // ajouter la dernière image
        apngImage.AddFrame(sourceImage, FrameDuration);

        apngImage.Save();
    }
}

Créer un PNG animé à partir de plusieurs pages Tiff à l’aide de C#

Vous pouvez également utiliser un fichier Tiff de plusieurs pages pour créer le PNG animé en définissant la durée de trame souhaitée. Voici les étapes pour créer un PNG animé à partir d’un fichier Tiff.

L’exemple de code suivant montre comment créer un PNG animé à partir d’un fichier Tiff à l’aide de C#.

// Exemple 4. Exportation au format de fichier APNG à partir d'un autre format non animé
using Aspose.Imaging;
using Aspose.Imaging.ImageOptions;

using (Image image = Image.Load("img4.tif")) {
    // Configuration de la durée d'image par défaut
    image.Save("img4.tif.500ms.png", new ApngOptions() { DefaultFrameTime = 500 }); // 500 ms
    image.Save("img4.tif.250ms.png", new ApngOptions() { DefaultFrameTime = 250 }); // 250 ms
}

Format source

Source Tiff

PNG animé

TIFF en PNG animé

Exporter un PNG animé vers un GIF animé à l’aide de C#

Vous pouvez également exporter une image PNG animée vers un GIF animé équivalent. Voici les étapes pour exporter APNG vers GIF.

L’exemple de code suivant montre comment exporter un PNG animé vers un GIF à l’aide de C#.

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

using (Image image = Image.Load("elephant.png")) {
    // Vérification du type d'image chargée
    Debug.Assert(image is ApngImage);
    // Enregistrer au même format
    image.Save("elephant_same_format.png");
    // Exporter vers l'autre format d'animation
    image.Save("elephant.png.gif", new GifOptions());
}

Source PNG animé

Image PNG animée

GIF animé

PNG animé vers GIF C#

Conclusion

Dans cet article, vous avez appris à créer un PNG animé à partir de différentes sources à l’aide de C#. Le guide étape par étape et les exemples de code ont montré comment créer un PNG animé à partir d’un PNG monopage et d’un Tiff multipage, ainsi qu’exporter un PNG animé vers un GIF animé à l’aide de C#. Vous pouvez en savoir plus sur la manipulation des images APNG en utilisant la documentation de l’API.

Voir également