Layers
Layers
PsdImage.Layers devuelve cada capa analizada como una matriz Layer. Cada Layer expone su propia geometría, visibilidad y estado de composición, así como metadatos sobre sus canales, máscara y rangos de fusión.
Lectura de metadatos de capa
Name, Bounds (y los derivados Width/Height/Top/Left/Bottom/Right), IsVisible, Opacity, Clipping, BlendModeKey y ChannelsCount se pueden leer directamente.
foreach (Layer layer in image.Layers)
{
Console.WriteLine($"{layer.Name}: {layer.Bounds}, " +
$"Visible={layer.IsVisible}, Opacity={layer.Opacity}, " +
$"BlendMode={layer.BlendModeKey}");
}Ediciones de metadatos compatibles
Name, IsVisible, Opacity, Clipping, BlendModeKey y los cuatro bordes de los límites (Top/Left/Bottom/Right) pueden modificarse directamente y volver a escribirse con 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);Metadatos de canal y máscara
ChannelInformation, LayerMaskData y LayerBlendingRangesData son de solo lectura en esta compilación FOSS — sus setters lanzan 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}");
}Eliminar o reordenar capas
PsdImage.Layers dispone de un setter y de un getter: asignar una matriz filtrada o reordenada reemplaza la colección de capas del documento. No existe un método público para crear una instancia nueva de Layer, por lo que solo se admite eliminar o reordenar capas ya existentes, no añadir una desde cero.
// Keep only visible layers
image.Layers = image.Layers.Where(layer => layer.IsVisible).ToArray();
image.Save(outputPath);Consejos y buenas prácticas
- Indexe
image.Layerspor posición; el orden del arreglo coincide con el orden de capas del propio documento. BlendModeKeyacepta cualquier valor del enumeradoBlendMode— no se realiza validación contra el modo de color declarado del documento.ChannelInformation,LayerMaskDatayLayerBlendingRangesDatapueden leerse pero nunca reasignarse.- Llame a
PsdImage.Save()una vez después de todas las ediciones; cada invocación escribe el documento completo.
Problemas comunes
| Problema | Causa | Solución |
|---|---|---|
NotSupportedException al establecer ChannelInformation, LayerMaskData o LayerBlendingRangesData | Estas 3 propiedades son solo lectura en la compilación FOSS a pesar de contar con un setter | Lea el valor; no intente reasignarlo |
LayerMaskData es null para una capa | No todas las capas tienen una subsección de máscara | Verifique null antes de usar (layer.LayerMaskData is { } mask) |
FAQ
¿Puedo eliminar una capa?
Sí — reasigna image.Layers a una matriz filtrada. No puedes añadir una capa nueva, ya que Layer no tiene constructor público; solo se pueden conservar, eliminar o reordenar las capas analizadas existentes.
¿Puedo cambiar los datos de canal o máscara de una capa?
No. ChannelInformation, LayerMaskData y LayerBlendingRangesData son de solo lectura — solo se pueden modificar Name, IsVisible, Opacity, Clipping, BlendModeKey y los bordes de los límites.
API Reference Resumen
| Clase/Método | Descripción |
|---|---|
PsdImage.Layers | Obtiene o establece la colección de capas — solo configurable para eliminación/reordenamiento |
Layer.Name / IsVisible / Opacity / Clipping / BlendModeKey / Top / Left / Bottom / Right | Ediciones de metadatos de capa compatibles |
Layer.Bounds / Width / Height / ChannelsCount | Geometría de capa de solo lectura |
Layer.ChannelInformation / LayerMaskData / LayerBlendingRangesData | Metadatos de canal, máscara y fusión de solo lectura |