PSD’yi GIF’e ihraç etmek, web grafikleri, e-posta varlıkları ve hafif animasyonlar için yaygın bir handoff. Aspose.PSD ile .NET, bir çağrıda bir PSD’ye dönüştürebilirsiniz ve bir PSD bir animo zaman çizgisini içerdiğinde, o zamanlı çizgiden doğrudan bir **animo GIC’i çıkarabilirsiniz.

Bu makalede her iki senaryo da tam, inline kodu ile gösterilmektedir.

Ön koşullar

  • .NET 6 veya sonraki (veya .Net Framework 4.6.2+)
  • Bu paket için: Aspose.PSD
dotnet add package Aspose.PSD

PSD’yi statik GIF’e dönüştürmek

Kullanımı Image.Load PSG’yi açmak için, PsdImageve kurtarma ile GifOptionsBu, PSD’yi tek çerçeve GIF’e dönüştürür.

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

Notlar

  • İstatik ihracat, PSD’de bir zaman dilimi gerektirmez.
  • Eğer farklı bir dosya boyutuna veya görünümüne ihtiyacınız varsa, ihraç etmeden önce kaynak sanatını optimize edin (yumuşak, renkler basitleştirin).

Zaman tabanlı PSD’yi animasyonlu GIF’lere dönüştürün

Eğer PSD’niz bir animasyon zaman çizgisini içeriyorsa, bu zaman aralığı API’sini kullanarak animat GIF olarak ihraç edebilirsiniz.

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

Notlar

  • Bu yol, PSD zaman çizgisinde tanımlanan çerçeve sırasına ve per-frame gecikmelere saygı gösterir.
  • PSD’niz zaman çizgisi verilerine sahip değilse, kod tek çerçeve GIF’e geri döner.

opsiyonel batch dönüştürme

Aşağıdaki araç, bir klasörde her PSD’yi GIF’e dönüştürür. animasyonlu PSD’ler mevcut olduğunda zaman çizgisiyle ihraç edilir, diğerleri statik gifler olarak ihrac edilir.

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

Çağrıdan Main:

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

En iyi uygulamalar

  • Renk sınırları: GIF, çerçeve başına 256 renk kadar indekslenmiş bir palet kullanır. karmaşık sanat eserleri için, PSD’deki katmanları veya renkleri daha iyi ve daha küçük dosyalar için basitleştirmeyi düşünün.
  • Gizlilik: GIF 1 bit şeffaflığı destekler. tam alfa ihtiyacınız varsa, statik görüntüler için PNG ve uyumlu ortamlarda animasyon için APNG kullanın.
    • Dosya boyutu**: Animasyonlu GIF’ler büyük olabilir. çerçeve sayısını, çizgi boyutunu veya sanat eserinin ayrıntılarını azaltın, böylece büyüklükleri pratik tutun.
  • Verifikasyon: Her zaman zamanlama, yuvarlanma ve palet davranışını doğrulamak için hedef ortamlarda çıkışları öngörün.

Bu desenlerle hem statik hem de animasyonlu PSD’yi .NET çalışma akışlarınızın içindeki GIF ihracatlarına otomatikleştirebilirsiniz.

More in this category