Layers
Layers
PsdImage.Layers は、解析されたすべてのレイヤーを Layer 配列として返します。各 Layer は、独自のジオメトリ、可視性、合成状態、およびチャンネル、マスク、ブレンド範囲に関するメタデータを公開します。
レイヤーメタデータの読み取り
Name、Bounds(および派生した Width/Height/Top/Left/Bottom/Right)、IsVisible、Opacity、Clipping、BlendModeKey、および ChannelsCount はすべて直接読み取り可能です。
foreach (Layer layer in image.Layers)
{
Console.WriteLine($"{layer.Name}: {layer.Bounds}, " +
$"Visible={layer.IsVisible}, Opacity={layer.Opacity}, " +
$"BlendMode={layer.BlendModeKey}");
}サポートされているメタデータ編集
Name、IsVisible、Opacity、Clipping、BlendModeKey、および 4 つの境界エッジ(Top/Left/Bottom/Right)は、その場で変更でき、PsdImage.Save() で書き戻すことができます。
Layer layer = image.Layers[0];
layer.Name = $"{layer.Name} (edited)";
layer.IsVisible = !layer.IsVisible;
layer.Opacity = 128;
layer.BlendModeKey = BlendMode.Multiply;
image.Save(outputPath);チャンネルおよびマスクメタデータ
ChannelInformation、LayerMaskData、および LayerBlendingRangesData はこの FOSS ビルドでは読み取り専用です — セッターを呼び出すと NotSupportedException がスローされます。
foreach (ChannelInformation channel in layer.ChannelInformation)
{
Console.WriteLine($"Channel {channel.ChannelID}: {channel.CompressionMethod}, {channel.Length} bytes");
}
if (layer.LayerMaskData is { } mask)
{
Console.WriteLine($"Mask bounds: {mask.MaskRectangle}, flags: {mask.Flags}");
}レイヤーの削除または並び替え
PsdImage.Layers には getter に加えて setter もあります: フィルタリングまたは並び替えた配列を代入すると、ドキュメントのレイヤーコレクションが置き換えられます。新しい Layer インスタンスを構築する公開された方法はないため、既に存在するレイヤーの削除または並び替えのみをサポートし、最初から追加することはできません。
// Keep only visible layers
image.Layers = image.Layers.Where(layer => layer.IsVisible).ToArray();
image.Save(outputPath);ヒントとベストプラクティス
- 位置で
image.Layersにインデックスしてください; 配列の順序はドキュメントのレイヤー順序と一致します。 BlendModeKeyは任意のBlendMode列挙値を受け入れます — ドキュメントで宣言されたカラーモードに対する検証は行われません。ChannelInformation、LayerMaskData、およびLayerBlendingRangesDataは読み取ることはできますが、再代入はできません。- すべての編集が完了した後に
PsdImage.Save()を一度呼び出してください。呼び出すたびに全文書が書き込まれます。
よくある問題
| 問題 | 原因 | 修正 |
|---|---|---|
NotSupportedException は ChannelInformation、LayerMaskData、または LayerBlendingRangesData を設定する際に | これらの3つのプロパティは、setter が存在するにもかかわらず、FOSS ビルドでは読み取り専用です | 値を読み取ってください;再代入しようとしないでください |
LayerMaskData はレイヤーに対して null です | すべてのレイヤーがマスクサブセクションを持つわけではありません | 使用前にnullをチェックしてください(layer.LayerMaskData is { } mask) |
FAQ
レイヤーを削除できますか?
はい — image.Layers をフィルタ済み配列に再割り当てします。Layer には公開コンストラクタがないため、新しいレイヤーを追加することはできません。既存の解析済みレイヤーのみを保持、削除、または並び替えることができます。
レイヤーのチャンネルまたはマスクデータを変更できますか?
いいえ。ChannelInformation、LayerMaskData、LayerBlendingRangesData は読み取り専用です — Name、IsVisible、Opacity、Clipping、BlendModeKey および境界エッジのみ変更可能です。
API Reference の概要
| クラス/メソッド | 説明 |
|---|---|
PsdImage.Layers | レイヤーコレクションを取得または設定します — 削除/並び替えのみ設定可能 |
Layer.Name / IsVisible / Opacity / Clipping / BlendModeKey / Top / Left / Bottom / Right | サポートされているレイヤーメタデータ編集 |
Layer.Bounds / Width / Height / ChannelsCount | 読み取り専用レイヤージオメトリ |
Layer.ChannelInformation / LayerMaskData / LayerBlendingRangesData | 読み取り専用チャンネル/マスク/ブレンドメタデータ |