サーバー上でAdobe Illustrator (AI) のアートワークをレンダリングすることは見た目ほど簡単ではなく、Type 1 関数ベースのシェーディング は多くのレンダラで問題になる機能の一つです。パイプラインでサムネイル、ウェブプレビュー、または印刷プルーフを AI ファイルから生成する場合、フラットな塗りつぶしに置き換えられることなく、シェーディングが正しく描画される必要があります。Aspose.PSD for .NET を使用すれば、数行のコードと Adobe Illustrator のインストールなしで、Type 1 シェーディングを含む AI ファイルを C# で PNG に変換できます。このチュートリアルでは、SDK のインストール、AI ファイルの読み込み、PngOptions の設定、マルチページ ドキュメントのエクスポート、そして本番環境でのエラー処理までを順を追って説明します。

AI Type 1 シェーディングを PNG に変換する理由

モダンな AI ファイルは、アートワークを PDF 互換の構造で保存し、PDF では滑らかな色の遷移のためにいくつかのシェーディングタイプが定義されています。タイプ 2(軸方向)とタイプ 3(放射状)のシェーディングは、線形および円形のグラデーションを表します。タイプ 1 のシェーディングは関数ベースです:各点の色は、その x および y 座標の数学的関数によって計算されます。これにより非常に柔軟になりますが、同時にレンダラーはシェーディング領域全体で関数を評価しなければならないことを意味します。

レンダラーが関数ベースのシェーディングを実装していない場合、シェーディングされた領域は通常スキップされるか単一の色で塗られ、エクスポートされた画像は元のデザインと一致しなくなります。Aspose.PSD for .NET はレンダリング中に Type 1 シェーディングを内部的に評価するため、保存する PNG は設計通りのアートワークを反映します。

この機能により、.NET 開発者は次のことができます:

  • デジタル資産管理(DAM)システム向けに正確なサムネイルとプレビューを生成します。
  • AI ファイルを表示できないウェブサイトやアプリで、Illustrator アートワークの PNG バージョンを公開します。
  • Windows、Linux、またはコンテナ上で実行できる自動化されたサーバーサイドのバッチ変換パイプラインを構築します。

Aspose.PSD を使用した AI タイプ 1 シェーディングの変換

Aspose.PSD for .NET は、Photoshop (PSD、PSB) ファイルの作成、編集、変換、および Adobe Illustrator (AI) ファイルの読み込みとエクスポートを行う C# ライブラリです。Adobe Photoshop や Illustrator がなくても動作し、NuGet パッケージとして配布されています。

このチュートリアルで使用されるクラスは次のとおりです:

  • Image (namespace Aspose.PSD): Image.Load を使用してサポートされている任意のファイルをロードするためのエントリーポイントです。
  • AiImage (namespace Aspose.PSD.FileFormats.Ai): 読み込まれた Illustrator ドキュメントを表し、PageCount や ActivePageIndex などのメンバーを公開します。
  • PngOptions (namespace Aspose.PSD.ImageOptions): ColorType や CompressionLevel などの PNG エクスポート設定を制御します。
  • PngColorType (namespace Aspose.PSD.FileFormats.Png): PNG のピクセルフォーマットを選択します。

インストール

Package Manager Console からパッケージをインストールします:

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. Type 1 シェーディングを含む AI ファイルの読み込み

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

The using ブロックは画像を破棄し、使用が完了した時点でリソースを解放します。シェーディング固有の設定は不要です:Type 1 シェーディングはドキュメントコンテンツの一部であり、保存時にレンダラーが処理します。

3. 画像を PNG として保存

PNG へのエクスポートは、出力パスと PngOptions インスタンスを受け取る Save の単一呼び出しで行われます。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タイプ1シェーディングをC#でPNGに変換

以下の 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) のようなキャストは問題ありません。アップロードハンドラやバッチジョブでは、予期しない形式が明確に報告され、InvalidCastException がスローされるのを防ぐために、image is AiImage aiImage を使用することを推奨します。

バッチ変換でのメモリ管理

大きなまたは複雑なアートワーク、特に関数ベースのシェーディングを使用する場合、CPU とメモリに負荷がかかります。ロードした各画像は必ず using ブロックでラップし、ファイルは一度に 1 つずつ(または小さく制限された並列度で)処理し、ファイル間で単一の PngOptions インスタンスを再利用してください。

透過性を保持

Use PngColorType.TruecolorWithAlpha は、PNG をウェブページやデザインツールなどの他のコンテンツの上に配置する場合に使用します。アルファチャンネルが不要な場合は、アルファなしの Truecolor 出力の方がファイルサイズが小さくなります。

エラーを明示的に処理する

入力ファイルが存在することを確認してからロードし、破損しているか解析できないファイルに対しては ImageLoadException(名前空間 Aspose.PSD.CoreExceptions)をキャッチします。例外メッセージとともにファイル名をログに記録すれば、バッチ内の失敗した項目を簡単に再試行できます。

Aspose.PSD を最新の状態に保つ

AIレンダリングはリリースごとに着実に改善され、シェーディング、ソフトマスク、インライン画像の修正が含まれます。ファイルが期待どおりにレンダリングされない場合は、トラブルシューティングを行う前に最新のパッケージ バージョンに更新してください。

無料ライセンスを取得

ライセンスがない場合、Aspose.PSD for .NET は評価モードで実行され、エクスポートされた画像に透かしが追加されます。30日間フル API をテストできる無料の一時ライセンスをリクエストし、最初の Image.Load 呼び出しの前に適用してください。

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

無料の追加リソース

結論

C# で Type 1 関数ベースのシェーディングを使用した AI ファイルを PNG に変換するのは、Aspose.PSD for .NET を使えば簡単です。NuGet パッケージをインストールし、Image.Load でファイルを読み込み、PngOptions を設定し、Save を呼び出します。ライブラリはレンダリング中にシェーディングを評価するため、Adobe Illustrator や外部ツールを使用せずに PNG が元のアートワークと一致します。ページ単位のエクスポート、安全な型チェック、明示的なエラーハンドリングにより、同じコードを単一プレビューから大規模なサーバーサイド変換パイプラインへとスケールさせることができます。

よくある質問

1. AI Type 1 シェーディングを PNG に変換するのにライセンスは必要ですか? ライセンスなしで試すことは可能ですが、ライセンスがない場合、Aspose.PSD は評価モードで実行され、出力に透かしが追加されます。制限なしで評価するために、30 日間の無料一時ライセンスをリクエストできます。製品環境で使用するには、購入したライセンスが必要です。

2. C# でマルチページ AI ファイルを PNG に変換するにはどうすればよいですか? AiImage.PageCount プロパティを読み取り、各ページインデックスに対して ActivePageIndex を設定し、個別の出力パスで Save を呼び出します。レガシー AI ファイルは PageCount が 0 と報告されるため、単一ページとして扱います。

3. AI ファイルに Type 1 シェーディングが含まれていない場合はどうなりますか?
コードに変更はありません。Aspose.PSD はファイルに含まれるものすべて(他のグラデーションタイプ、パス、インライン画像など)をレンダリングし、結果を PNG に保存します。

4. AI を PNG にエクスポートする際に品質の低下はありますか?
PNG はロスレス形式であるため、レンダラーが生成したピクセルは圧縮アーティファクトなしで保存されます。出力サイズは、読み込まれた AiImage が報告する Width と Height に従います。

5. Aspose.PSD for .NET がサポートする .NET バージョンはどれですか? Aspose.PSD for .NET は .NET Framework と最新の .NET の両方をサポートしており、.NET 8 および .NET 9 用の専用ビルドはバージョン 25.4 以降で提供されています。インストールするリリースの正確なターゲットについては、NuGet の Aspose.PSD パッケージの Frameworks タブを確認してください。

6. PNG 圧縮レベルはどのように制御できますか? Save を呼び出す前に、PngOptions.CompressionLevel を 0(保存、最速)から 9(最大圧縮、最小ファイル)までの値に設定します。圧縮はすべてのレベルでロスレスであるため、ファイルサイズとエンコード時間にのみ影響します。

続きを読む