Експортирање ПСД-а на ГИФ је уобичајена грешка за веб графике, е-поштанске и лагане анимације. са Аспосе.ПСД за .НЕТ, можете конвертовати ПСС на статички ГиФ у једном позиву, а када ПСП садржи анимирајућу временску линију, можете извозити анимирани Гиф директно из те временске линије.

Овај чланак приказује оба сценарија са комплетним, инлине кодом.

Принципи

  • .NET 6 или новији (или .Net Framework 4.6.2+)
  • НУГЕТ пакете: Aspose.PSD
dotnet add package Aspose.PSD

Претварање ПСД-а у статички ГИФ

Коришћење Image.Load Да би се отворио ПСД, покренуо је PsdImagei sačuvati sa GifOptionsОво флатира ПСД у једнократни ГИФ.

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

Упозорење

  • Статички извоз не захтева временску линију у ПСД-у.
  • Ако вам је потребна другачија величина датотеке или изглед, оптимизирајте изворну уметничку радњу (платно, поједностављајте боје) пре извоза.

Претварање ПСД-а на основу временске линије у анимирани ГИФ

Ако ваш ПСД садржи временску линију анимације, можете га извозити као анимирани ГИФ користећи АПИ временске линије.

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

Упозорење

  • Овај пут поштује распоред оквира и одлагања по оквиру дефинисане у ПСД временској линији.
  • Ако ваш ПСД нема временске податке, код се враћа у једнократни ГИФ.

Опционална конверзија бацх

Следећа корисница конвертује сваки ПСД у фасциклу у ГИФ. Анимирани ПСП извозе преко временске линије када су доступни, други извози као статички ГИС.

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

Позовите га од Main:

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

Најбоља пракса

  • Боје ограничења: ГИФ користи индексирану палету са до 256 боја по оквиру. за сложене уметничке радове, размислите о поједностављању слојева или боје у ПСД-у за боље и мање датотеке.
  • Прозрачност: ГИФ подржава транспарентност од 1 бита.Ако вам је потребна пуна алфа, користите ПНГ за статичке слике и АПНГ за анимацију у компатибилним окружењима.
  • Фил величина: Анимирани ГИФ-а могу бити велики. Смањите број оквира, величину оквиру или детаље уметничког дела како бисте одржали величине практичне.
  • Верификација: Увек прегледати производњу у циљним окружењима како би се потврдило распоређење, роупинг и палетно понашање.

Са овим обрасцима, можете аутоматизовати и статичке и анимиране ПСД на ГИФ извозе унутар вашег .НЕТ радног тока.

More in this category