Renderowanie grafiki Adobe Illustrator (AI) na serwerze jest trudniejsze niż się wydaje, a Type 1 function-based shading jest jedną z funkcji, które sprawiają trudności wielu rendererom. Jeśli Twój pipeline generuje miniaturki, podglądy internetowe lub proofy do druku z plików AI, potrzebujesz, aby to cieniowanie było renderowane poprawnie, a nie zastępowane płaskim wypełnieniem. Aspose.PSD for .NET pozwala konwertować pliki AI zawierające Type 1 shading do PNG w C# przy użyciu kilku linii kodu i bez instalacji Adobe Illustrator. Ten tutorial przeprowadzi Cię przez instalację SDK, wczytywanie pliku AI, konfigurowanie PngOptions, eksportowanie dokumentów wielostronicowych oraz obsługę błędów w środowisku produkcyjnym.

Dlaczego konwertować cieniowanie AI Type 1 do PNG

Nowoczesne pliki AI przechowują swoją grafikę w strukturze kompatybilnej z PDF, a PDF definiuje kilka typów cieniowania dla płynnych przejść kolorów. Typ 2 (osiowy) i Typ 3 (promieniowy) opisują gradienty liniowe i kołowe. Typ 1 cieniowanie jest oparte na funkcji: kolor w każdym punkcie jest obliczany przez funkcję matematyczną zależną od współrzędnych x i y. To czyni je bardzo elastycznym, ale oznacza również, że renderer musi ocenić funkcję na całym obszarze cieniowanym.

Gdy renderer nie implementuje cieniowania opartego na funkcjach, obszar cieniowany jest zazwyczaj pomijany lub malowany jednym kolorem, a wyeksportowany obraz nie odpowiada już pierwotnemu projektowi. Aspose.PSD for .NET ocenia cieniowanie typu 1 wewnętrznie podczas renderowania, więc zapisany plik PNG odzwierciedla dzieło tak, jak zostało zaprojektowane.

Dzięki tej funkcji programiści .NET mogą:

  • Generuj dokładne miniatury i podglądy dla systemów zarządzania zasobami cyfrowymi (DAM).
  • Publikuj wersje PNG dzieł Illustrator na stronach internetowych i w aplikacjach, które nie mogą wyświetlać plików AI.
  • Twórz zautomatyzowane, po stronie serwera potoki konwersji wsadowej, które działają na Windows, Linux lub w kontenerach.

Używanie Aspose.PSD do konwertowania cieniowania AI typu 1

Aspose.PSD for .NET jest biblioteką C# służącą do tworzenia, edytowania i konwertowania plików Photoshop (PSD, PSB) oraz do ładowania i eksportowania plików Adobe Illustrator (AI). Działa bez Adobe Photoshop lub Illustrator i jest dystrybuowana jako pakiet NuGet.

Klasy użyte w tym samouczku to:

  • Image (namespace Aspose.PSD): punkt wejścia do ładowania dowolnego obsługiwanego pliku za pomocą Image.Load.
  • AiImage (namespace Aspose.PSD.FileFormats.Ai): reprezentuje załadowany dokument Illustrator i udostępnia członków takich jak PageCount i ActivePageIndex.
  • PngOptions (namespace Aspose.PSD.ImageOptions): kontroluje ustawienia eksportu PNG, takie jak ColorType i CompressionLevel.
  • PngColorType (namespace Aspose.PSD.FileFormats.Png): wybiera format pikseli PNG.

Instalacja

Zainstaluj pakiet z konsoli Menedżera pakietów:

Install-Package Aspose.PSD

Lub przy użyciu .NET CLI:

dotnet add package Aspose.PSD

Więcej informacji znajdziesz na stronie produktu Aspose.PSD for .NET, w dokumentacji deweloperskiej, oraz w referencji API.

1. Skonfiguruj swój projekt .NET

Utwórz aplikację konsolową, aby hostować kod konwersji. Poniższe przykłady używają instrukcji na najwyższym poziomie i dopasowywania wzorców C# 9, więc celuj w .NET 6 lub nowszy.

  1. Utwórz nowy projekt z wiersza poleceń lub w Visual Studio:
dotnet new console -n AiShadingConversion
cd AiShadingConversion
  1. Dodaj pakiet Aspose.PSD for .NET, używając jednego z poleceń instalacji pokazanych powyżej.
  2. Otwórz Program.cs i dodaj wymagane dyrektywy using na początku:
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 udostępnia klasę Image, a Aspose.PSD.FileFormats.Ai zawiera AiImage. PngOptions znajduje się w Aspose.PSD.ImageOptions, podczas gdy Aspose.PSD.FileFormats.Png zapewnia wyliczenie PngColorType. Aspose.PSD.CoreExceptions zawiera ImageLoadException, którego użyjesz do obsługi błędów.

2. Wczytaj plik AI zawierający cieniowanie typu 1

Image.Load wykrywa format pliku automatycznie. Gdy źródłem jest dokument Illustrator, zwracany obiekt jest typu AiImage. Sprawdzanie typu przy użyciu dopasowywania wzorca jest bezpieczniejsze niż bezpośrednie rzutowanie, ponieważ bezpośrednie rzutowanie powoduje wyrzucenie InvalidCastException, jeśli ktoś przekaże plik PSD lub inny obsługiwany format.

Co robi kod:

  • Tworzy pełną ścieżkę do źródłowego pliku AI.
  • Ładuje plik przy użyciu Image.Load.
  • Potwierdza, że wynik jest AiImage i wypisuje jego rozmiar oraz liczbę stron.
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}");
}

Blok using zwalnia obraz i zwalnia jego zasoby, gdy tylko skończysz z nim pracować. Nie jest wymagana żadna specyficzna konfiguracja cieniowania: cieniowanie typu 1 jest częścią zawartości dokumentu i jest obsługiwane przez renderer podczas zapisywania.

3. Zapisz obraz jako PNG

Eksportowanie do PNG wymaga jednego wywołania Save, które przyjmuje ścieżkę wyjściową oraz instancję PngOptions. Ustawienie ColorType na PngColorType.TruecolorWithAlpha zapisuje obraz 32‑bitowy RGBA, dzięki czemu zachowywana jest wszelka przez renderownik generowana przezroczystość, a CompressionLevel (0‑9) wymienia szybkość kodowania na rozmiar pliku.

Co robi kod:

  • Tworzy folder wyjściowy, jeśli nie istnieje.
  • Ładuje plik AI jako AiImage.
  • Konfiguruje PngOptions i zapisuje wyrenderowaną grafikę, w tym cieniowanie Type 1, jako 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}");
}

Otwórz shadingType1.png w dowolnej przeglądarce obrazów i porównaj go z oryginalnym dziełem, aby potwierdzić, że cieniowane obszary renderują się zgodnie z oczekiwaniami.

Pełny przykład: konwersja cieniowania AI typu 1 do PNG w C#

Poniższy Program.cs łączy wszystko w jedną gotową do produkcji aplikację konsolową. Waliduje on dane wejściowe, eksportuje każdą stronę wielostronicowego pliku AI i obsługuje błędy ładowania.

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. Porady, typowe pułapki i kwestie wydajności

Eksportuj wielostronicowe pliki AI strona po stronie

Dokumenty Illustrator mogą zawierać kilka stron (artboardów). AiImage.PageCount zwraca liczbę stron, a ActivePageIndex wybiera stronę, którą renderuje Save. Ustaw indeks, zapisz i powtórz, jak pokazano w pełnym przykładzie. Zauważ, że AiImage.Layers zwraca obiekty AiLayerSection, które opisują strukturę dokumentu; nie są to oddzielne obrazy, więc używaj stron zamiast warstw, gdy potrzebujesz jednego pliku PNG na każdy artboard.

Użyj dopasowywania wzorców zamiast ślepych rzutowań

Rzutowanie takie jak (AiImage)Image.Load(path) jest w porządku, gdy kontrolujesz dane wejściowe. W obsłudze przesyłania lub zadaniach wsadowych lepiej używać image is AiImage aiImage, aby nieoczekiwane formaty były zgłaszane wyraźnie zamiast wyrzucać InvalidCastException.

Zarządzanie pamięcią w konwersjach wsadowych

Renderowanie dużych lub skomplikowanych grafik, szczególnie z cieniowaniem opartym na funkcjach, jest intensywne pod względem CPU i pamięci. Zawsze otaczaj każdy załadowany obraz blokiem using, przetwarzaj pliki pojedynczo (lub przy niewielkim, ograniczonym stopniu równoległości) i ponownie używaj jednej instancji PngOptions dla wszystkich plików.

Zachowaj przejrzystość

Użyj PngColorType.TruecolorWithAlpha, gdy PNG będzie umieszczany nad inną zawartością, taką jak strona internetowa lub narzędzie projektowe. Jeśli nie potrzebujesz kanału alfa, wyjście w trybie truecolor bez alfa generuje mniejsze pliki.

Obsługuj błędy jawnie

Sprawdź, czy plik wejściowy istnieje przed jego wczytaniem i przechwyć ImageLoadException (przestrzeń nazw Aspose.PSD.CoreExceptions) dla plików, które są uszkodzone lub nie mogą zostać sparsowane. Zaloguj nazwę pliku wraz z komunikatem wyjątku, aby nieudane elementy w partii były łatwe do ponownego przetworzenia.

Utrzymuj Aspose.PSD w najnowszej wersji

Renderowanie AI poprawia się stopniowo z każdą wersją, w tym wprowadzane są poprawki dotyczące cieniowania, miękkich masek i obrazów w linii. Jeśli plik renderuje się inaczej niż oczekiwano, zaktualizuj do najnowszej wersji pakietu przed dalszym rozwiązywaniem problemów.

Uzyskaj darmową licencję

Bez licencji Aspose.PSD for .NET działa w trybie ewaluacyjnym i dodaje znak wodny do wyeksportowanych obrazów. Poproś o bezpłatną tymczasową licencję, aby przetestować pełne API przez 30 dni, a następnie zastosuj ją przed pierwszym wywołaniem Image.Load.

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

Darmowe dodatkowe zasoby

Podsumowanie

Konwertowanie plików AI z cieniowaniem opartym na funkcjach Type 1 do PNG w C# jest proste przy użyciu Aspose.PSD for .NET. Zainstaluj pakiet NuGet, załaduj plik za pomocą Image.Load, skonfiguruj PngOptions i wywołaj Save: biblioteka ocenia cieniowanie podczas renderowania, więc Twój PNG odpowiada oryginalnej grafice bez Adobe Illustrator ani zewnętrznych narzędzi. Dzięki eksportowi strona po stronie, bezpiecznym sprawdzaniu typów i wyraźnemu obsługiwaniu błędów, ten sam kod skaluje się od pojedynczego podglądu do wysokowydajnych, serwerowych potoków konwersji.

Najczęściej zadawane pytania

1. Czy potrzebna jest licencja, aby konwertować cieniowanie AI Type 1 na PNG? Licencja nie jest wymagana do wypróbowania, ale bez niej Aspose.PSD działa w trybie ewaluacyjnym, co dodaje znak wodny do wyniku. Możesz poprosić o darmową 30‑dniową tymczasową licencję, aby ocenić bez ograniczeń. Zakupiona licencja jest wymagana do użytku produkcyjnego.

2. Jak przekonwertować wielostronicowy plik AI na PNG w C#?
Przeczytaj właściwość AiImage.PageCount, następnie ustaw ActivePageIndex na każdy indeks strony i wywołaj Save z oddzielną ścieżką wyjściową. Starsze pliki AI zgłaszają PageCount równy 0, więc traktuj je jako pojedynczą stronę.

3. Co się stanie, jeśli plik AI nie zawiera cieniowania typu 1?
Nic się nie zmienia w twoim kodzie. Aspose.PSD renderuje wszystko, co znajduje się w pliku, w tym inne typy gradientów, ścieżki i obrazy wbudowane, i zapisuje wynik jako PNG.

4. Czy przy eksportowaniu AI do PNG występuje utrata jakości?
PNG jest formatem bezstratnym, więc piksele wygenerowane przez renderer są przechowywane bez artefaktów kompresji. Rozmiar wyjściowy odpowiada wartościom Width i Height zgłoszonym przez wczytany AiImage.

5. Jakie wersje .NET obsługuje Aspose.PSD for .NET?
Aspose.PSD for .NET obsługuje zarówno .NET Framework, jak i nowoczesny .NET, a dedykowane kompilacje .NET 8 i .NET 9 są dostępne od wersji 25.4. Sprawdź zakładkę Frameworks pakietu Aspose.PSD w serwisie NuGet, aby poznać dokładne cele wydania, które instalujesz.

6. Jak mogę kontrolować poziom kompresji PNG? Ustaw PngOptions.CompressionLevel na wartość od 0 (przechowywanie, najszybsze) do 9 (maksymalna kompresja, najmniejszy plik) przed wywołaniem Save. Kompresja jest bezstratna na każdym poziomie, więc wpływa tylko na rozmiar pliku i czas kodowania.

Czytaj więcej