Layers
Layers
PsdImage.Layers mengembalikan setiap lapisan yang diurai sebagai array Layer. Setiap Layer menampilkan geometri, visibilitas, dan status kompositnya sendiri, serta metadata tentang kanalnya, masker, dan rentang pencampuran.
Membaca Metadata Lapisan
Name, Bounds (dan Width/Height/Top/Left/Bottom/Right yang diturunkan), IsVisible, Opacity, Clipping, BlendModeKey, dan ChannelsCount semuanya dapat dibaca secara langsung.
foreach (Layer layer in image.Layers)
{
Console.WriteLine($"{layer.Name}: {layer.Bounds}, " +
$"Visible={layer.IsVisible}, Opacity={layer.Opacity}, " +
$"BlendMode={layer.BlendModeKey}");
}Edit Metadata yang Didukung
Name, IsVisible, Opacity, Clipping, BlendModeKey, dan empat tepi batas (Top/Left/Bottom/Right) dapat diubah di tempat dan ditulis kembali dengan 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);Metadata Kanal dan Masker
ChannelInformation, LayerMaskData, dan LayerBlendingRangesData bersifat read-only dalam build FOSS ini — setter mereka melempar 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}");
}Menghapus atau Menyusun Ulang Lapisan
PsdImage.Layers memiliki setter serta getter: menugaskan array yang telah difilter atau disusun ulang menggantikan koleksi lapisan dokumen. Tidak ada cara publik untuk membuat instance Layer yang baru, jadi ini hanya mendukung penghapusan atau penyusunan ulang lapisan yang sudah ada — bukan menambahkan lapisan baru dari awal.
// Keep only visible layers
image.Layers = image.Layers.Where(layer => layer.IsVisible).ToArray();
image.Save(outputPath);Tips dan Praktik Terbaik
- Indeks ke
image.Layersberdasarkan posisi; urutan array sesuai dengan urutan lapisan dokumen itu sendiri. BlendModeKeymenerima nilai enumBlendModeapa pun — tidak ada validasi yang dilakukan terhadap mode warna yang dideklarasikan dokumen.ChannelInformation,LayerMaskData, danLayerBlendingRangesDatadapat dibaca tetapi tidak pernah dapat ditetapkan kembali.- Panggil
PsdImage.Save()sekali setelah semua penyuntingan; setiap pemanggilan menulis seluruh dokumen.
Masalah Umum
| Masalah | Penyebab | Perbaikan |
|---|---|---|
NotSupportedException saat mengatur ChannelInformation, LayerMaskData, atau LayerBlendingRangesData. | Ketiga properti ini bersifat read-only dalam build FOSS meskipun memiliki setter. | Baca nilai tersebut; jangan mencoba menetapkannya kembali. |
LayerMaskData adalah null untuk sebuah lapisan. | Tidak setiap lapisan memiliki subbagian mask. | Periksa null sebelum digunakan (layer.LayerMaskData is { } mask) |
FAQ
Bisakah saya menghapus lapisan?
Ya — tetapkan ulang image.Layers ke array yang disaring. Anda tidak dapat menambahkan lapisan baru, karena Layer tidak memiliki konstruktor publik; hanya lapisan yang sudah diparsing yang ada dapat dipertahankan, dihapus, atau diurutkan kembali.
Bisakah saya mengubah saluran atau data masker lapisan?
Tidak. ChannelInformation, LayerMaskData, dan LayerBlendingRangesData bersifat read-only — hanya Name, IsVisible, Opacity, Clipping, BlendModeKey, dan tepi batas yang dapat diubah.
API Reference Ringkasan
| Kelas/Metode | Deskripsi |
|---|---|
PsdImage.Layers | Mendapatkan atau mengatur koleksi lapisan — dapat diatur untuk penghapusan/penyusunan ulang saja |
Layer.Name / IsVisible / Opacity / Clipping / BlendModeKey / Top / Left / Bottom / Right | Edit metadata lapisan yang didukung |
Layer.Bounds / Width / Height / ChannelsCount | Geometri lapisan hanya-baca |
Layer.ChannelInformation / LayerMaskData / LayerBlendingRangesData | Metadata saluran/mask/blending hanya-baca |