Mit Aspose.PSD für .NET können Sie einen PSD in eine statische GIF in einem Anruf umwandeln, und wenn ein PSD eine Animationszeitlinie enthält, kann man einen animierten Gif direkt aus dieser Zeitlinie exportieren.

Dieser Artikel zeigt beide Szenarien mit vollständigem, inline-Code.

Voraussetzung

  • .NET 6 oder höher (oder .Net Framework 4.6.2+)
  • Das NuGet Paket: Aspose.PSD
dotnet add package Aspose.PSD

Umwandeln PSD in statisches GIF

Use Image.Load um den PSD zu öffnen, zum PsdImageund sparen mit GifOptionsDadurch wird der PSD in ein Single-Frame GIF eingefügt.

// File: Program.cs
using System;
using System.IO;
using Aspose.PSD;
using Aspose.PSD.FileFormats.Psd;
using Aspose.PSD.ImageOptions;

class Program
{
    static void Main()
    {
        var inputPsd  = "input.psd";
        var outputGif = "output-static.gif";

        if (!File.Exists(inputPsd))
        {
            Console.WriteLine("Input PSD not found.");
            return;
        }

        using (var psd = (PsdImage)Image.Load(inputPsd))
        {
            // Export as a single-frame GIF
            var gifOptions = new GifOptions();
            psd.Save(outputGif, gifOptions);
        }

        Console.WriteLine("Saved: " + Path.GetFullPath(outputGif));
    }
}

Anmerkungen

  • Statische Exporte erfordern keine Timeline im PSD.
  • Wenn Sie eine andere Dateigröße oder Aussehen benötigen, optimieren Sie das Quellwerk (Flatte, vereinfacht Farbe) vor dem Export.

Convert timeline-basierte PSD in animierte GIF

Wenn Ihr PSD eine Animationszeitlinie enthält, können Sie es als animierte GIF mit der Timeline API exportieren.

// File: Program.cs
using System;
using System.IO;
using Aspose.PSD;
using Aspose.PSD.FileFormats.Psd;
using Aspose.PSD.ImageOptions;

class Program
{
    static void Main()
    {
        var inputPsd   = "animated.psd";
        var outputAgif = "output-animated.gif";

        if (!File.Exists(inputPsd))
        {
            Console.WriteLine("Input PSD not found.");
            return;
        }

        using (var psd = (PsdImage)Image.Load(inputPsd))
        {
            if (psd.Timeline != null)
            {
                // Export PSD timeline as animated GIF
                var gifOptions = new GifOptions();
                psd.Timeline.Save(outputAgif, gifOptions);
                Console.WriteLine("Saved animated GIF: " + Path.GetFullPath(outputAgif));
            }
            else
            {
                // Fallback to static export if the PSD has no timeline
                var gifOptions = new GifOptions();
                psd.Save(outputAgif, gifOptions);
                Console.WriteLine("PSD has no timeline. Saved static GIF: " + Path.GetFullPath(outputAgif));
            }
        }
    }
}

Anmerkungen

  • Dieser Weg respektiert die Rahmenordnung und die Per-Frame-Verzögerungen, die in der PSD Timeline definiert sind.
  • Wenn Ihr PSD keine Timeline-Daten hat, fällt der Code zurück zu einem Single-Frame GIF.

Optionelle Batch-Konvertierung

Die folgende Dienstleistung konvertiert jede PSD in einer Ordnung in GIF. Animierte PSDs exportieren über die Timeline, wenn verfügbar, andere als statische Gifs.

// File: BatchPsdToGif.cs
using System;
using System.IO;
using Aspose.PSD;
using Aspose.PSD.FileFormats.Psd;
using Aspose.PSD.ImageOptions;

public static class BatchPsdToGif
{
    public static void Run(string inputDir, string outputDir)
    {
        Directory.CreateDirectory(outputDir);
        var psdFiles = Directory.GetFiles(inputDir, "*.psd", SearchOption.AllDirectories);

        foreach (var psdPath in psdFiles)
        {
            var rel   = Path.GetRelativePath(inputDir, psdPath);
            var outFn = Path.ChangeExtension(rel, ".gif");
            var outFp = Path.Combine(outputDir, outFn);

            Directory.CreateDirectory(Path.GetDirectoryName(outFp) ?? outputDir);

            try
            {
                using var psd = (PsdImage)Image.Load(psdPath);
                var gifOptions = new GifOptions();

                if (psd.Timeline != null)
                {
                    psd.Timeline.Save(outFp, gifOptions);
                }
                else
                {
                    psd.Save(outFp, gifOptions);
                }

                Console.WriteLine($"OK  {rel} -> {outFn}");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"ERR {rel}: {ex.Message}");
            }
        }
    }
}

Rufen Sie es von Main:

// inside Main
// BatchPsdToGif.Run(@"C:\in-psd", @"C:\out-gif");

Beste Praktiken

  • Farbgrenze: GIF verwendet eine indexierte Palette mit bis zu 256 Farben pro Frame. Für komplexe Kunstwerke berücksichtigen Sie die Vereinfachung der Schichten oder Farbe im PSD für bessere und kleinere Dateien.
  • Transparenz: GIF unterstützt 1-Bit Transparenz.Wenn Sie eine vollständige Alpha benötigen, verwenden Sie PNG für statische Bilder und APNG zur Animation in kompatiblen Umgebungen.
  • File-Größe: Animierte GIFs können groß sein. Reduzieren Sie die Frame-Zahl, Framergrößen oder Kunstwerk-Details, um die Größen praktisch zu halten.
  • Verifizierung: Überprüfen Sie immer die Ausgabe in Zielumgebungen, um Timing, Looping und Paletteverhalten zu bestätigen.

Mit diesen Mustern können Sie sowohl statische als auch animierte PSD zu GIF-Exporten innerhalb Ihrer .NET-Workflows automatisieren.

More in this category