Rendering Adobe Illustrator (AI) artwork on a server is harder than it looks, and Type 1 function-based shading is one of the features that trips up many renderers. اگر خط لوله شما تصاویر بندانگشتی، پیش‌نمایش‌های وب یا اثبات‌های چاپی را از فایل‌های AI تولید می‌کند، نیاز دارید که این سایه‌گذاری به‌درستی رسم شود و نه اینکه با یک پر کردن صاف جایگزین شود. Aspose.PSD for .NET به شما امکان می‌دهد فایل‌های AI که شامل Type 1 shading هستند را به PNG در C# تبدیل کنید، تنها با چند خط کد و بدون نیاز به نصب Adobe Illustrator. این آموزش شما را در نصب SDK، بارگذاری فایل AI، پیکربندی PngOptions، استخراج اسناد چندصفحه‌ای و مدیریت خطاها در محیط تولید راهنمایی می‌کند.

چرا تبدیل سایه‌گذاری نوع 1 AI به PNG

فایل‌های مدرن AI آثار هنری خود را در ساختاری سازگار با PDF ذخیره می‌کنند و PDF چندین نوع شیدینگ برای انتقال‌های رنگی صاف تعریف می‌کند. شیدینگ‌های نوع ۲ (محوری) و نوع ۳ (شعاعی) گرادیان‌های خطی و دایره‌ای را توصیف می‌کنند. شیدینگ نوع ۱ بر پایه تابع است: رنگ در هر نقطه با یک تابع ریاضی از مختصات x و y آن محاسبه می‌شود. این باعث می‌شود که بسیار انعطاف‌پذیر باشد، اما به این معناست که رندرر باید تابع را در تمام ناحیه شیدینگ ارزیابی کند.

زمانی که یک رندرکننده تابع‌محور سایه‌زنی را پیاده‌سازی نمی‌کند، ناحیه سایه‌دار معمولاً نادیده گرفته می‌شود یا با یک رنگ تک رنگ رنگ می‌شود و تصویر صادر شده دیگر با طراحی اصلی مطابقت ندارد. Aspose.PSD for .NET در طول رندرینگ، سایه‌زنی نوع 1 را به‌صورت داخلی ارزیابی می‌کند، بنابراین PNG که ذخیره می‌کنید، اثر هنری را همان‌طور که طراحی شده است نشان می‌دهد.

با این قابلیت، توسعه‌دهندگان .NET می‌توانند:

  • تولید تصویرهای بندانگشتی و پیش‌نمایش دقیق برای سیستم‌های مدیریت دارایی دیجیتال (DAM)
  • انتشار نسخه‌های PNG آثار Illustrator در وب‌سایت‌ها و برنامه‌هایی که نمی‌توانند فایل‌های AI را نمایش دهند
  • ساخت خطوط لوله تبدیل دسته‌ای خودکار، سمت سرور که بر روی ویندوز، لینوکس یا در کانتینرها اجرا می‌شوند

استفاده از Aspose.PSD برای تبدیل سایه‌گذاری نوع 1 AI

Aspose.PSD for .NET یک کتابخانه C# برای ایجاد، ویرایش و تبدیل فایل‌های Photoshop (PSD، PSB) و برای بارگذاری و صادرات فایل‌های Adobe Illustrator (AI) است. این کتابخانه بدون نیاز به Adobe Photoshop یا Illustrator اجرا می‌شود و به‌صورت بسته NuGet توزیع می‌شود.

کلاس‌های مورد استفاده در این آموزش عبارتند از:

  • Image (namespace Aspose.PSD): نقطه ورودی برای بارگذاری هر فایل پشتیبانی‌شده از طریق Image.Load.
  • AiImage (namespace Aspose.PSD.FileFormats.Ai): نمایانگر یک سند Illustrator بارگذاری‌شده است و اعضایی مانند PageCount و ActivePageIndex را در دسترس قرار می‌دهد.
  • PngOptions (namespace Aspose.PSD.ImageOptions): تنظیمات خروجی PNG را کنترل می‌کند، مانند ColorType و CompressionLevel.
  • PngColorType (namespace Aspose.PSD.FileFormats.Png): فرمت پیکسل PNG را انتخاب می‌کند.

نصب

پکیج را از کنسول مدیر بسته نصب کنید:

Install-Package Aspose.PSD

یا با .NET CLI:

dotnet add package Aspose.PSD

می‌توانید اطلاعات بیشتری را در صفحه محصول Aspose.PSD for .NET، در مستندات توسعه‌دهنده، و در مرجع API بیابید.

1. پیکربندی پروژه .NET خود

یک برنامه کنسولی ایجاد کنید تا کد تبدیل را میزبانی کند. مثال‌های زیر از دستورات سطح بالا و الگوهای مطابقت C# 9 استفاده می‌کنند، بنابراین هدف .NET 6 یا بالاتر باشد.

  1. یک پروژه جدید را از خط فرمان یا در Visual Studio ایجاد کنید:
dotnet new console -n AiShadingConversion
cd AiShadingConversion
  1. بسته Aspose.PSD for .NET را با استفاده از یکی از دستورات نصب نشان داده شده در بالا اضافه کنید.
  2. فایل Program.cs را باز کنید و دستورات using مورد نیاز را در بالای فایل اضافه کنید:
using System;
using System.IO;
using Aspose.PSD;
using Aspose.PSD.CoreExceptions;
using Aspose.PSD.FileFormats.Ai;
using Aspose.PSD.FileFormats.Png;
using Aspose.PSD.ImageOptions;

Aspose.PSD کلاس Image را فراهم می‌کند و Aspose.PSD.FileFormats.Ai شامل AiImage است. PngOptions در Aspose.PSD.ImageOptions قرار دارد، در حالی که Aspose.PSD.FileFormats.Png شمارش PngColorType را ارائه می‌دهد. Aspose.PSD.CoreExceptions شامل ImageLoadException است که برای مدیریت خطا استفاده خواهید کرد.

2. بارگذاری یک فایل AI حاوی سایه‌گذاری نوع 1

Image.Load به‌صورت خودکار فرمت فایل را تشخیص می‌دهد. وقتی منبع یک سند Illustrator باشد، شیء بازگشتی یک AiImage است. بررسی نوع با الگوی تطبیق ایمن‌تر از تبدیل مستقیم است، زیرا تبدیل مستقیم در صورتی که کسی یک PSD یا فرمت پشتیبانی‌شده دیگر را پاس بدهد، InvalidCastException را پرتاب می‌کند.

کد چه کاری انجام می‌دهد:

  • مسیر کامل به فایل AI منبع را می‌سازد.
  • فایل را با Image.Load بارگذاری می‌کند.
  • تأیید می‌کند که نتیجه یک AiImage است و اندازه و تعداد صفحات آن را چاپ می‌کند.
string baseFolder = @"C:\Images";
string sourceFile = Path.Combine(baseFolder, "shadingType1.ai");

using (Image image = Image.Load(sourceFile))
{
    if (image is not AiImage aiImage)
    {
        Console.WriteLine("The source file is not an Adobe Illustrator document.");
        return;
    }

Console.WriteLine($"Loaded AI file: {aiImage.Width} x {aiImage.Height} px, pages: {aiImage.PageCount}");
}

بلوک using تصویر را از بین می‌برد و منابع آن را به محض اینکه کار با آن تمام شد آزاد می‌کند. نیازی به تنظیمات خاص سایه‌زنی نیست: سایه‌زنی نوع 1 بخشی از محتوای سند است و هنگام ذخیره‌سازی توسط رندرر پردازش می‌شود.

3. ذخیره تصویر به صورت PNG

صادر کردن به PNG با یک فراخوانی به Save انجام می‌شود که مسیر خروجی و یک نمونه PngOptions را می‌پذیرد. تنظیم ColorType به PngColorType.TruecolorWithAlpha یک تصویر 32‑بیتی RGBA می‌نویسد به‌طوری که هر شفافیتی که توسط رندرر تولید می‌شود حفظ شود، و CompressionLevel (0 تا 9) سرعت کدگذاری را در مقابل اندازه فایل تعادل می‌دهد.

کد چه کاری انجام می‌دهد:

  • اگر پوشه خروجی وجود نداشته باشد، آن را ایجاد می‌کند.
  • فایل AI را به عنوان AiImage بارگذاری می‌کند.
  • PngOptions را پیکربندی کرده و اثر هنری رندر شده را، شامل سایه‌گذاری Type 1، به صورت PNG ذخیره می‌کند.
string baseFolder = @"C:\Images";
string outputFolder = @"C:\Converted";
string sourceFile = Path.Combine(baseFolder, "shadingType1.ai");
string outputFile = Path.Combine(outputFolder, "shadingType1.png");

Directory.CreateDirectory(outputFolder);

using (var aiImage = (AiImage)Image.Load(sourceFile))
{
    var pngOptions = new PngOptions
    {
        ColorType = PngColorType.TruecolorWithAlpha,
        CompressionLevel = 6 // 0 = store (fastest), 9 = maximum compression
    };

aiImage.Save(outputFile, pngOptions);
    Console.WriteLine($"PNG saved to {outputFile}");
}

فایل shadingType1.png را در هر نمایشگر تصویری باز کنید و آن را با اثر اصلی مقایسه کنید تا تأیید کنید که نواحی سایه‌دار همان‌طور که انتظار می‌رود نمایش داده می‌شوند.

مثال کامل: تبدیل AI Type 1 Shading به PNG در C#

برنامهٔ زیر Program.cs همه چیز را در یک برنامهٔ کنسولی آماده برای تولید ترکیب می‌کند. این برنامه ورودی را اعتبارسنجی می‌کند، هر صفحهٔ یک فایل AI چندصفحه‌ای را صادر می‌نماید و خطاهای بارگذاری را مدیریت می‌کند.

using System;
using System.IO;
using Aspose.PSD;
using Aspose.PSD.CoreExceptions;
using Aspose.PSD.FileFormats.Ai;
using Aspose.PSD.FileFormats.Png;
using Aspose.PSD.ImageOptions;

// Optional: apply a license to remove the evaluation watermark.
// var license = new License();
// license.SetLicense("Aspose.PSD.NET.lic");

string sourceFile = @"C:\Images\shadingType1.ai";
string outputFolder = @"C:\Converted";

if (!File.Exists(sourceFile))
{
    Console.WriteLine($"Source file not found: {sourceFile}");
    return;
}

Directory.CreateDirectory(outputFolder);

var pngOptions = new PngOptions
{
    ColorType = PngColorType.TruecolorWithAlpha,
    CompressionLevel = 6
};

try
{
    using (Image image = Image.Load(sourceFile))
    {
        if (image is not AiImage aiImage)
        {
            Console.WriteLine("The source file is not an Adobe Illustrator document.");
            return;
        }

string baseName = Path.GetFileNameWithoutExtension(sourceFile);

// Legacy AI files report PageCount = 0, so treat them as a single page.
        if (aiImage.PageCount <= 1)
        {
            string outputFile = Path.Combine(outputFolder, $"{baseName}.png");
            aiImage.Save(outputFile, pngOptions);
            Console.WriteLine($"Saved {outputFile}");
        }
        else
        {
            for (int i = 0; i < aiImage.PageCount; i++)
            {
                aiImage.ActivePageIndex = i;
                string outputFile = Path.Combine(outputFolder, $"{baseName}_page{i + 1}.png");
                aiImage.Save(outputFile, pngOptions);
                Console.WriteLine($"Saved {outputFile}");
            }
        }
    }
}
catch (ImageLoadException ex)
{
    Console.WriteLine($"Could not load the AI file: {ex.Message}");
}
catch (Exception ex)
{
    Console.WriteLine($"Conversion failed: {ex.Message}");
}

4. نکات، مشکلات رایج، و ملاحظات عملکرد

صادرات فایل‌های AI چندصفحه‌ای صفحه به صفحه

اسناد Illustrator می‌توانند شامل چندین صفحه (آرت‌بورد) باشند. AiImage.PageCount تعداد صفحات را برمی‌گرداند و ActivePageIndex صفحه‌ای را که Save رندر می‌کند انتخاب می‌کند. ایندکس را تنظیم کنید، ذخیره کنید و تکرار کنید، همان‌طور که در مثال کامل نشان داده شده است. توجه داشته باشید که AiImage.Layers اشیاء AiLayerSection را برمی‌گرداند که ساختار سند را توصیف می‌کنند؛ این‌ها تصاویر جداگانه نیستند، بنابراین هنگامی که به یک PNG برای هر آرت‌بورد نیاز دارید، از صفحات به جای لایه‌ها استفاده کنید.

از الگوی مطابقت به جای تبدیل‌های کور استفاده کنید

یک تبدیل مانند (AiImage)Image.Load(path) مناسب است وقتی ورودی را کنترل می‌کنید. در هندلرهای بارگذاری یا کارهای دسته‌ای، ترجیحاً از image is AiImage aiImage استفاده کنید تا فرمت‌های غیرمنتظره به‌وضوح گزارش شوند به‌جای اینکه InvalidCastException پرتاب شود.

مدیریت حافظه در تبدیل‌های دسته‌ای

رندر کردن آثار بزرگ یا پیچیده، به‌ویژه با سایه‌زنی مبتنی بر توابع، مصرف‌پذیر CPU و حافظه است. همیشه هر تصویر بارگذاری‌شده را در یک بلوک using بپیچید، فایل‌ها را یکی‌یکی پردازش کنید (یا با درجه‌ی محدود و کوچک از موازی‌سازی)، و یک نمونهٔ PngOptions واحد را در بین فایل‌ها مجدداً استفاده کنید.

حفظ شفافیت

از PngColorType.TruecolorWithAlpha استفاده کنید وقتی که PNG قرار است بر روی محتوای دیگر، مانند یک صفحه وب یا در یک ابزار طراحی، قرار گیرد. اگر به کانال آلفا نیاز ندارید، خروجی truecolor بدون آلفا فایل‌های کوچکتری تولید می‌کند.

خطاها را به‌صورت صریح مدیریت کنید

قبل از بارگذاری، اطمینان حاصل کنید که فایل ورودی وجود دارد و برای فایل‌هایی که خراب هستند یا نمی‌توانند تجزیه شوند، ImageLoadException (فضای‌نام Aspose.PSD.CoreExceptions) را دریافت کنید. نام فایل را همراه با پیام استثنا ثبت کنید تا موارد ناموفق در یک دسته به راحتی قابل تلاش مجدد باشند.

Aspose.PSD را به‌روز نگه دارید

رندرینگ هوش مصنوعی به‌صورت پیوسته از نسخه‌ای به نسخه دیگر بهبود می‌یابد، از جمله اصلاحات برای سایه‌زنی، ماسک‌های نرم و تصاویر درون‌خطی. اگر فایلی به‌طور متفاوتی نسبت به انتظار رندر شود، قبل از ادامه عیب‌یابی، به آخرین نسخه بسته به‌روزرسانی کنید.

دریافت یک لایسنس رایگان

بدون لایسنس، Aspose.PSD for .NET در حالت ارزیابی اجرا می‌شود و یک واترمارک به تصاویر صادر شده اضافه می‌کند. برای تست کامل API به مدت ۳۰ روز، یک لایسنس موقت رایگان درخواست کنید، سپس قبل از اولین فراخوانی به Image.Load آن را اعمال کنید.

var license = new License();
license.SetLicense("Aspose.PSD.NET.lic");

منابع اضافی رایگان

نتیجه‌گیری

تبدیل فایل‌های AI با سایه‌زنی مبتنی بر توابع Type 1 به PNG در C# به‌راحتی با Aspose.PSD for .NET امکان‌پذیر است. بسته NuGet را نصب کنید، فایل را با Image.Load بارگذاری کنید، PngOptions را پیکربندی کنید و Save را فراخوانی کنید: کتابخانه در هنگام رندرینگ سایه‌زنی را ارزیابی می‌کند، بنابراین PNG شما با اثر هنری اصلی مطابقت دارد بدون نیاز به Adobe Illustrator یا ابزارهای خارجی. با صادرات صفحه به صفحه، بررسی‌های ایمن نوع داده و مدیریت صریح خطاها، همان کد از یک پیش‌نمایش تک به خطوط تبدیل با حجم بالا و سمت سرور مقیاس می‌یابد.

سوالات متداول

1. آیا برای تبدیل سایه‌گذاری AI Type 1 به PNG به مجوز نیاز دارم؟ برای آزمایش نیازی به مجوز نیست، اما بدون آن Aspose.PSD در حالت ارزیابی اجرا می‌شود که یک واترمارک به خروجی اضافه می‌کند. می‌توانید یک مجوز موقت رایگان 30 روزه برای ارزیابی بدون محدودیت درخواست کنید. برای استفاده در تولید، یک مجوز خریداری شده لازم است.

۲. چگونه می‌توان یک فایل AI چند صفحه‌ای را به PNG در C# تبدیل کرد؟ مقدار ویژگی AiImage.PageCount را بخوانید، سپس ActivePageIndex را برای هر شاخص صفحه تنظیم کنید و متد Save را با مسیر خروجی جداگانه فراخوانی کنید. فایل‌های AI قدیمی مقدار PageCount برابر ۰ گزارش می‌دهند، بنابراین آنها را به عنوان یک صفحه در نظر بگیرید.

3. اگر فایل AI شامل سایه‌گذاری Type 1 نباشد چه اتفاقی می‌افتد؟
هیچ تغییری در کد شما ایجاد نمی‌شود. Aspose.PSD هر چیزی که فایل شامل می‌شود، از جمله انواع دیگر گرادیان، مسیرها و تصاویر درون‌خطی، رندر می‌کند و نتیجه را به PNG ذخیره می‌نماید.

۴. آیا هنگام خروجی گرفتن AI به PNG هیچ کاهش کیفیتی وجود دارد؟
PNG یک فرمت بدون اتلاف است، بنابراین پیکسل‌های تولید شده توسط رندرر بدون عیوب فشرده‌سازی ذخیره می‌شوند. اندازه خروجی بر اساس Width و Height گزارش‌شده توسط AiImage بارگذاری‌شده تعیین می‌شود.

5. کدام نسخه‌های .NET توسط Aspose.PSD for .NET پشتیبانی می‌شود؟ Aspose.PSD for .NET هر دو .NET Framework و .NET مدرن را پشتیبانی می‌کند و نسخه‌های اختصاصی .NET 8 و .NET 9 از نسخه 25.4 به بعد منتشر شده‌اند. برای هدف‌های دقیق نسخه‌ای که نصب می‌کنید، برگه Frameworks بسته Aspose.PSD در NuGet را بررسی کنید.

6. چگونه می‌توانم سطح فشرده‌سازی PNG را کنترل کنم؟ مقدار PngOptions.CompressionLevel را به عددی بین 0 (ذخیره، سریع‌ترین) تا 9 (بیشینه فشرده‌سازی، کوچک‌ترین فایل) قبل از فراخوانی Save تنظیم کنید. فشرده‌سازی در هر سطحی بدون اتلاف است، بنابراین فقط بر اندازه فایل و زمان رمزگذاری تأثیر می‌گذارد.

ادامه مطلب