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, 및 네 개의 경계 가장자리 (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 빌드에서 읽기 전용이며 — 해당 setter는 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 | 읽기 전용 채널/마스크/블렌딩 메타데이터 |