با استفاده از 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 برای باز کردن PSD، به 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));
    }
}

یادداشت ها

  • صادرات استاتیک نیازی به یک خط زمانی در PSD ندارد.
  • پالت GIF به طور خودکار تولید می شود.اگر به اندازه یا ظاهر فایل متفاوت نیاز دارید، قبل از صادرات، کارهای منبع را بهینه سازی کنید (سطح، رنگ ها را ساده تر کنید).

تبدیل PSD مبتنی بر خط زمانی به GIF های متحرک

اگر PSD شما حاوی یک خط زمانی انیمیشن است، می توانید آن را به عنوان یک GIF متحرک با استفاده از API خط زمان صادر کنید.این ترتیب چارچوب را حفظ می کند و تاخیرهای فریم در 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));
            }
        }
    }
}

یادداشت ها

  • این مسیر به ترتیب چارچوب و تاخیرهای per-frame تعریف شده در خط زمانی PSD احترام می گذارد.
  • اگر PSD شما اطلاعات خط زمانی ندارد، کد به یک GIF تک چارچوبی باز می گردد.

گزینه Batch Conversion

ابزار زیر هر 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 برای تصاویر استاتیک و APNG را برای انیمیشن در محیط های سازگار استفاده کنید.
  • حجم فایل: GIF های انیمیشن می توانند بزرگ باشند.کاهش تعداد چارچوب، اندازه فریم یا جزئیات هنری برای حفظ اندازه های عملی.
  • Verification: همیشه نتایج پیش بینی شده را در محیط های هدف برای تأیید زمان بندی، چرخش و رفتار پالت بررسی کنید.

با استفاده از این الگوهای، شما می توانید هر دو PSD استاتیک و انیمیشن را به صادرات GIF در جریان های کاری .NET خود اتوماتیک کنید.

More in this category