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.Layers por posición; el orden del arreglo coincide con el orden de capas del propio documento.
  • BlendModeKey acepta cualquier valor del enumerado BlendMode — no se realiza validación contra el modo de color declarado del documento.
  • ChannelInformation, LayerMaskData y LayerBlendingRangesData pueden 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

ProblemaCausaSolución
NotSupportedException al establecer ChannelInformation, LayerMaskData o LayerBlendingRangesDataEstas 3 propiedades son solo lectura en la compilación FOSS a pesar de contar con un setterLea el valor; no intente reasignarlo
LayerMaskData es null para una capaNo todas las capas tienen una subsección de máscaraVerifique 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étodoDescripción
PsdImage.LayersObtiene o establece la colección de capas — solo configurable para eliminación/reordenamiento
Layer.Name / IsVisible / Opacity / Clipping / BlendModeKey / Top / Left / Bottom / RightEdiciones de metadatos de capa compatibles
Layer.Bounds / Width / Height / ChannelsCountGeometría de capa de solo lectura
Layer.ChannelInformation / LayerMaskData / LayerBlendingRangesDataMetadatos de canal, máscara y fusión de solo lectura

Ver también

 Español