Med Aspose.PSD for .NET kan du konvertere en PSD til en statisk GIF i én samtale, og når en PSD indeholder en animationstidslinje, er du i stand til at eksportere et animeret Gif direkte fra den timeline.

Denne artikel viser begge scenarier med komplet, inline kode.

Forudsætninger

  • .NET 6 eller nyere (eller .Net Framework 4.6.2+)
  • NuGet pakke: Aspose.PSD
dotnet add package Aspose.PSD

Konverter PSD til statisk GIF

Brug af Image.Load til at åbne PSD, kastet til PsdImageog sparer med GifOptionsDette blæser PSD til en single-frame GIF.

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

Noter

  • Statisk eksport kræver ikke en timeline i PSD.
  • Hvis du har brug for en anden filstørrelse eller udseende, optimere kilden kunstværk (flad, forenkle farver) før eksport.

Konverter timeline-baseret PSD til animeret GIF

Hvis din PSD indeholder en animationstidslinje, kan du eksportere den som et animeret GIF ved hjælp af timeline API. Dette bevarer rammeordenen og rammerne forsinkelser gemt i PSD.

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

Noter

  • Denne vej respekterer rammeordre og per-frame forsinkelser defineret i PSD timeline.
  • Hvis din PSD ikke har timeline data, falder koden tilbage til en single-frame GIF.

Optionel batch konvertering

Følgende værktøj konverterer hver PSD i en mappe til GIF. Animerede PSD’er eksporteres via tidslinjen, når de er tilgængelige, andre eksporteres som statiske Gif.

// 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}");
            }
        }
    }
}

kald det fra Main:

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

Bedste praksis

  • Color limits: GIF bruger en indekseret palet med op til 256 farver pr. ramme.For komplekse kunstværker, overveje at forenkle lag eller farver i PSD for bedre og mindre filer.
  • Transparens: GIF understøtter 1-bit gennemsigtighed. Hvis du har brug for fuld alfa, skal du bruge PNG til statiske billeder og APNG for animation i kompatible miljøer.
  • Filstørrelse: Animerede GIF’er kan være store. Reduktion af rammerne, ramme størrelsen eller kunstværkets detaljer for at holde størrelserne praktiske.
  • Verifikation: Altid forudse resultatet i målmiljøer for at bekræfte timing, looping og palette adfærd.

Med disse mønstre kan du automatisere både statisk og animeret PSD til GIF-eksporinger inden for dine .NET-arbejdsstrømme.

More in this category