Layers

Layers

PsdImage.Layers minden feldolgozott réteget Layer tömbként ad vissza. Minden Layer saját geometriáját, láthatóságát és kompozíciós állapotát, valamint metaadatait a csatornáiról, maszkjáról és keverési tartományairól teszi közzé.


Rétegmetaadatok olvasása

Name, Bounds (és a származtatott Width/Height/Top/Left/Bottom/Right), IsVisible, Opacity, Clipping, BlendModeKey és ChannelsCount mind közvetlenül olvashatók.

foreach (Layer layer in image.Layers)
{
    Console.WriteLine($"{layer.Name}: {layer.Bounds}, " +
                       $"Visible={layer.IsVisible}, Opacity={layer.Opacity}, " +
                       $"BlendMode={layer.BlendModeKey}");
}

Támogatott metaadat-szerkesztések

Name, IsVisible, Opacity, Clipping, BlendModeKey, valamint a négy határél (Top/Left/Bottom/Right) helyben módosíthatók, és visszaírhatók a PsdImage.Save() segítségével.

Layer layer = image.Layers[0];
layer.Name = $"{layer.Name} (edited)";
layer.IsVisible = !layer.IsVisible;
layer.Opacity = 128;
layer.BlendModeKey = BlendMode.Multiply;
image.Save(outputPath);

Csatorna- és maszkmetaadatok

ChannelInformation, LayerMaskData és LayerBlendingRangesData csak olvashatóak ebben a FOSS buildben — a setterjeik NotSupportedException kivételt dobnak.

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}");
}

Rétegek eltávolítása vagy átrendezése

PsdImage.Layers rendelkezik setterrel és getterrel is: egy szűrt vagy átrendezett tömb hozzárendelése felülírja a dokumentum réteggyűjteményét. Nincs nyilvános mód egy teljesen új Layer példány létrehozására, ezért ez csak a már meglévő rétegek eltávolítását vagy átrendezését támogatja — nem a teljesen új hozzáadását.

// Keep only visible layers
image.Layers = image.Layers.Where(layer => layer.IsVisible).ToArray();
image.Save(outputPath);

Tippek és bevált gyakorlatok

  • Az image.Layers indexelése pozíció szerint; a tömb sorrendje megegyezik a dokumentum saját rétegsorrendjével.
  • BlendModeKey bármely BlendMode enum értéket elfogad — nem történik validálás a dokumentum deklarált színmódja ellen.
  • ChannelInformation, LayerMaskData és LayerBlendingRangesData olvasható, de soha nem rendelhető újra.
  • Hívja meg a PsdImage.Save() függvényt egyszer az összes szerkesztés után; minden hívás a teljes dokumentumot írja.

Gyakori problémák

ProblémaOkJavítás
NotSupportedException a(z) ChannelInformation, LayerMaskData vagy LayerBlendingRangesData beállításakorEz a három tulajdonság csak olvasható a FOSS buildben, annak ellenére, hogy van setterjeOlvasd ki az értéket; ne próbáld meg újra hozzárendelni
LayerMaskData egy null egy réteg eseténNem minden rétegnek van maszk alrészEllenőrizze a null meglétét a használat előtt (layer.LayerMaskData is { } mask)

FAQ

Eltávolíthatok egy réteget?

Igen — rendeld hozzá újra a image.Layers változót egy szűrt tömbhöz. Nem adhat hozzá teljesen új réteget, mivel a Layer nem rendelkezik nyilvános konstruktorral; csak a már létező, feldolgozott rétegek tarthatók, távolíthatók el vagy rendezhetők át.

Megváltoztathatom egy réteg csatorna- vagy maszkadatait?

Nem. A ChannelInformation, LayerMaskData és LayerBlendingRangesData csak olvasható — csak a Name, IsVisible, Opacity, Clipping, BlendModeKey és a határélek módosíthatók.


API Reference összefoglaló

Osztály/MódszerLeírás
PsdImage.LayersLekérdezi vagy beállítja a réteggyűjteményt — csak eltávolításra/újrarendezésre állítható be
Layer.Name / IsVisible / Opacity / Clipping / BlendModeKey / Top / Left / Bottom / RightTámogatott rétegmetaadat-szerkesztések
Layer.Bounds / Width / Height / ChannelsCountCsak olvasható réteggeometria
Layer.ChannelInformation / LayerMaskData / LayerBlendingRangesDataCsak olvasható csatorna/maszk/keverési metaadatok

Lásd még:

 Magyar