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読み取り専用チャンネル/マスク/ブレンドメタデータ

参照

 日本語