A PSD-nek a GIF-re való exportálása a webes grafika, az e-mail eszközök és a könnyű animációk számára gyakori handoff. Aspose.PSD for .NET használatával egy híváson átválthatja a PSD‐t egy statikus Gif-ra, és ha egy PSD animációs idővonalat tartalmaz, akkor közvetlenül ebből az időponttól kiválaszthatja a animált Gifi-t.

Ez a cikk mindkét forgatókönyvet mutat be teljes, inline kódmal.

előfeltételek

  • .NET 6 vagy újabb (vagy .Net Framework 4.6.2+)
  • A NuGet csomag: Aspose.PSD
dotnet add package Aspose.PSD

Konvertáljuk a PSD-t a statikus GIF-re

Használat Image.Load A PSD megnyitása, a PsdImageés megtakarítja a GifOptionsEz a PSD-t egy egyszemélyes GIF-be helyezi.

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

Megjegyzések

  • A statikus export nem igényel idővonalat a PSD-ben.
  • A GIF palettát automatikusan generálják.Ha más fájlméretre vagy megjelenésre van szüksége, az export előtt optimalizálja a forrás műalkotást (szilárd, egyszerűsítse a színeket).

Az idővonalon alapuló PSD átalakítása animált GIF-re

Ha a PSD animációs idővonalat tartalmaz, akkor az animált GIF formájában exportálhatja az API-t. Ez megőrzi a keretrendet és a keretek késleltetéseit, amelyeket az PSD-ben tárolnak.

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

Megjegyzések

  • Ez az útvonal tiszteletben tartja a keretrendet és a PSD idővonalában meghatározott per-frame késéseket.
  • Ha a PSD-nek nincsenek idővonaladatok, a kód visszatér egy egyszobás GIF-hez.

Opcionális batch konverzió

A következő segédeszköz minden PSD-t egy mappában GIF-re konvertál.A animált PSD-k a rendelkezésre álló idővonalon keresztül exportálódnak, mások statikus GIC-ként.

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

Hívja el a Main:

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

A legjobb gyakorlatok

  • ** Színhatárok**: A GIF indexelt palettát használ akár 256 színű keretrendszerre. összetett műalkotások esetén fontolja meg a PSD-ben lévő rétegek vagy színek egyszerűsítését a jobb és kisebb fájlok érdekében.
  • ** Átláthatóság**: A GIF támogatja az 1-bit átlátszatot. ha teljes alfa szükséges, használja a PNG-t a statikus képekhez és az APNG a kompatibilis környezetekben történő animációhoz.
  • Fájlméret: Az animált GIF-ek nagyok lehetnek. Csökkentse a keret számát, a keretek méretét vagy a műalkotási részleteket, hogy a méretek praktikusak maradjanak.
  • Verifikáció: Mindig előre látja a teljesítményt a célkörnyezetben, hogy megerősítse az időzítést, az áramlást és a palettát.

Ezekkel a mintákkal automatizálhatja mind a statikus, mind az animált PSD-t a GIF-ek exportjára a .NET munkafolyamatokban.

More in this category