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 をスローします。