Экспортирование ПСД в ГИФ — это распространенная проблема для веб-графики, электронной почты и легких анимаций. с Aspose.PSD для .NET вы можете конвертировать PSD в статический GIF в одном звонке, а когда PSD содержит график анимирования, вы сможете экспортуть анимированный Gif непосредственно с этого графика.

Эта статья показывает оба сценария с полным, встраиваемым кодом.

Предупреждения

  • .NET 6 или более поздний (или .Net Framework 4.6.2+)
  • Новый пакет: Aspose.PSD
dotnet add package Aspose.PSD

Конвертировать PSD в статический GIF

Использование Image.Load Открыть ПСД, выпустить PsdImageи спасать с GifOptionsЭто превращает PSD в одноразовый 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));
    }
}

Примечания

  • Статический экспорт не требует временной линии в ПСД.
  • Палет GIF генерируется автоматически.Если вам нужен разный размер файла или внешний вид, перед экспортом оптимизируйте источник искусства (плавный, упрощайте цвета).

Конвертировать ПСД на основе временной линии в анимационный GIF

Если ваш PSD содержит график анимации, вы можете экспортировать его в качестве анимированного GIF с использованием API временной линии.

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

Примечания

  • Этот путь соответствует порядку рамки и задержкам по рамке, определенным в временной линии PSD.
  • Если ваш PSD не имеет данных временной линии, код возвращается к однократному GIF.

Опциональная конверсия батареи

Следующий инструмент конвертирует каждый PSD в папке в GIF. Анимационные PSD экспортируются через временную линию, когда они доступны, другие экспортуются как статические 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}");
            }
        }
    }
}

Назовите его от Main:

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

Лучшие практики

  • Ограничения цвета: GIF использует индексированную палету с до 256 цветов на рамку.Для сложных произведений искусства, рассмотрите упрощенные слои или цвета в PSD для лучшего и более мелких файлов.
  • Прозрачность: GIF поддерживает 1-битную прозрасть.Если вам нужна полная альфа, используйте PNG для статических изображений и APPG для анимации в совместимых средах.
  • ** Размер файла**: Анимированные GIF могут быть большими. Снизить количество фремов, размеры рамки или детали искусства, чтобы размеры были практичными.
  • Проверка: Всегда проверяйте результат в целевой среде, чтобы подтвердить расположение, крушение и палетное поведение.

С помощью этих шаблонов вы можете автоматизировать как статические, так и анимированные ПСД на экспорт GIF внутри ваших рабочих потоков .NET.

More in this category