Práce s vrstvami
Vytvoření skupiny vrstev
Skupina vrstev se skládá z jedné nebo více vrstev a pomáhá organizovat podobné nebo související vrstvy. S pomocí Aspose.PSD pro .NET můžete vytvořit skupinu vrstev. Pro tento účel byla do třídy PsdImage přidána nová metoda AddLayerGroup pro přidání skupiny vrstev.
Postup pro vytvoření skupin vrstev je následující:
- Vytvořte instanci obrázku pomocí třídy PsdImage se specifikovanou šířkou, výškou a možnostmi obrázku.
- Vytvořte LayerGroup se zadaným názvem skupiny a indexem.
- Vytvořte instanci třídy Layer a přiřaďte ji k obrázku PSD.
- Přidejte vytvořenou vrstvu do skupiny vrstev pomocí metody AddLayer vystavené třídou LayerGroup.
- Uložte výsledky.
Následující ukázka kódu vám ukáže, jak vytvořit skupinu vrstev.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
string inputFile = dataDir + "ButtonTemp.psd"; | |
var createOptions = new PsdOptions(); | |
createOptions.Source = new FileCreateSource(inputFile, false); | |
createOptions.Palette = new PsdColorPalette(new Color[] { Color.Green }); | |
using (var psdImage = (PsdImage)Image.Create(createOptions, 500, 500)) | |
{ | |
LayerGroup group1 = psdImage.AddLayerGroup("Group 1", 0, true); | |
Layer layer1 = new Layer(psdImage); | |
layer1.Name = "Layer 1"; | |
group1.AddLayer(layer1); | |
LayerGroup group2 = group1.AddLayerGroup("Group 2", 1); | |
Layer layer2 = new Layer(psdImage); | |
layer2.Name = "Layer 2"; | |
group2.AddLayer(layer2); | |
Layer layer3 = new Layer(psdImage); | |
layer3.Name = "Layer 3"; | |
group2.AddLayer(layer3); | |
Layer layer4 = new Layer(psdImage); | |
layer4.Name = "Layer 4"; | |
group1.AddLayer(layer4); | |
psdImage.Save(dataDir + "LayerGroups_out.psd"); | |
} |
Přejmenování vrstvy
Můžete použít jakékoliv jméno, které byste chtěli, ale typickou praxí je použití obecného popisu objektu nebo prvku, který se nachází na této vrstvě. Tento článek ukazuje, jak můžete změnit název vrstvy pomocí Aspose.PSD pro .NET. Pro tento účel byla do třídy vrstvy přidána nová vlastnost DisplayName pro správné zobrazení názvu vrstvy. Bylo zjištěno, že když Photoshop uloží název vrstvy pomocí vlastnosti Name, pak jsou korejské znaky uloženy jako bajt 63 ‘?’ v ASCII. Pokud tedy chcete název vrstvy zobrazit správně, použijte vlastnost DisplayName, protože vlastnost Name nepodporuje korejské znaky.
Následující ukázkový kód ukazuje, jak můžete přejmenovat vrstvu.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir_PSD(); | |
// make changes in layer names and save it | |
using (var image = (PsdImage)Image.Load(dataDir + "Korean_layers.psd")) | |
{ | |
for (int i = 0; i < image.Layers.Length; i++) | |
{ | |
var layer = image.Layers[i]; | |
// set new value into DisplayName property | |
layer.DisplayName += "_changed"; | |
} | |
image.Save(dataDir + "Korean_layers_output.psd"); | |
} |
Podpora propojených vrstev
Propojení vrstev je podobné seskupování vrstev. Pokud propojíte dvě nebo více vrstev, umožní vám to provést určité změny na obou propojených vrstvách. Například pokud aplikujete transformace na jednu vrstvu, budou se aplikovat na všechny ostatní propojené vrstvy. Tento článek ukazuje, jak můžete získat a odpojit propojené vrstvy pomocí Aspose.PSD.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
{ | |
Layer[] layers = psd.Layers; | |
// link all layers in one linked group | |
short layersLinkGroupId = psd.LinkedLayersManager.LinkLayers(layers); | |
// gets id for one layer | |
short linkGroupId = psd.LinkedLayersManager.GetLinkGroupId(layers[0]); | |
if (layersLinkGroupId != linkGroupId) | |
{ | |
throw new Exception("layersLinkGroupId and linkGroupId are not equal."); | |
} | |
// gets all linked layers by link group id. | |
Layer[] linkedLayers = psd.LinkedLayersManager.GetLayersByLinkGroupId(linkGroupId); | |
// unlink each layer from group | |
foreach (var linkedLayer in linkedLayers) | |
{ | |
psd.LinkedLayersManager.UnlinkLayer(linkedLayer); | |
} | |
// retrieves NULL for a link group ID that has no layers in the group. | |
linkedLayers = psd.LinkedLayersManager.GetLayersByLinkGroupId(linkGroupId); | |
if (linkedLayers != null) | |
{ | |
throw new Exception("The linkedLayers field is not NULL."); | |
} | |
psd.Save(dataDir + "LinkedLayerexample_output.psd"); | |
} |