PSD レイヤーを .NET で操作する方法

PSD レイヤーを .NET で操作する方法

このガイドでは、ドキュメントのレイヤーを一覧表示し、編集可能なレイヤーメタデータを読み取って変更し、レイヤーの位置を再設定し、コレクションからレイヤーを削除する方法を示します。ロードされた PsdImage の Layers プロパティは、その Layer オブジェクトのコレクションを返します。各 Layer は、名前、可視性、不透明度、クリッピング、ブレンドモード、位置(境界エッジ)— などの編集可能なメタデータを公開し、さらに読み取り専用の全体境界とチャンネル情報を提供します。

ステップバイステップガイド

ステップ1: パッケージをインストールする

git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-.NET.git
cd Aspose.PSD-FOSS-for-.NET
dotnet build

ステップ2: 必要なクラスをインポートする

後で使用する LINQ 拡張メソッド (Where) は System.Linq から取得されます。PSD 固有の型は、以下の 2 つの Aspose.PSD 名前空間から取得されます。

using System.Linq;
using Aspose.PSD.FileFormats.Psd;
using Aspose.PSD.FileFormats.Core.Blending;

ステップ 3: ドキュメントを読み込み、レイヤーを一覧表示する

ドキュメントを読み込み、次に Layers を反復して各レイヤーの名前とジオメトリを確認します:

using var image = PsdImage.Load("input.psd");

foreach (var layer in image.Layers)
{
    Console.WriteLine($"{layer.Name}: {layer.Width}x{layer.Height} at ({layer.Left},{layer.Top})");
}

ステップ 4: レイヤーの表示状態、透明度、ブレンドモードを読み取り・編集する

IsVisible、Opacity(0-255)、Clipping、Name、および BlendModeKey はすべて動作するセッターがあります:

var layer = image.Layers[0];

layer.IsVisible = false;          // hide the layer
layer.Opacity = 200;              // ~78% opacity
layer.BlendModeKey = BlendMode.Multiply;
layer.Name = "Renamed Layer";

ステップ 5: レイヤーの境界を読み取り、位置を変更する

Bounds、Width、Height、および ChannelsCount は読み取り専用です — しかし Top、Left、Bottom、Right はそれぞれレイヤーの位置を変更する動作するセッターがあります:

Console.WriteLine($"Bounds: {layer.Bounds}");
Console.WriteLine($"Channels: {layer.ChannelsCount}");

layer.Left = 10;
layer.Top = 20;
layer.Right = 40;
layer.Bottom = 60;

ステップ 6: レイヤーコレクションを置き換える

PsdImage.Layers 自体に動作するセッターがあるため、コレクション全体を置き換えることができます(例: レイヤーを削除する場合):

image.Layers = image.Layers.Where(l => l.Name != "Renamed Layer").ToArray();

ステップ7:ドキュメントを保存する

前の手順で行ったすべての編集をディスクに永続化します:

image.Save("output.psd");

一般的な問題と修正方法

NotSupportedException 設定するとき ChannelInformation, LayerMaskData, または LayerBlendingRangesData. これらの3つ Layer setterはこのFOSSビルドではサポートされていません — 読み取り専用として扱ってください。

不透明度の値が設定後に正しくないようです。 Opacity は byte (0-255)、0.0-1.0 の小数やパーセンテージではありません — layer.Opacity = 200 約78%不透明 (200/255) を意味します。

レイヤーへの変更が保存後に反映されません。 変更しているのが Layer から取得したインスタンス image.Layers、そして呼び出していることを image.Save 編集を行った後に。

よくある質問

ドキュメントからレイヤーを削除できますか?

はい — PsdImage.Layers には機能するセッターがあるので、フィルタ済み配列を割り当ててレイヤーを削除できます(ステップ 6 を参照)。

利用可能なブレンドモードは何ですか?

BlendMode には Normal、Multiply、Screen、Overlay、Darken などの値が含まれます — Layer.BlendModeKey で設定します。

レイヤーマスクデータは利用可能ですか?

Layer.LayerMaskData には機能するゲッターがありますが、この FOSS ビルドではセッターが NotSupportedException をスローします。

参照

 日本語