レイヤーグループの作成
レイヤーグループは1つ以上のレイヤーで構成され、類似したレイヤーまたは関連するレイヤーを整理するのに役立ちます。Aspose.PSD for .NETを使用して、レイヤーグループを作成することができます。そのために、PsdImageクラスに新しいメソッドAddLayerGroupが追加され、レイヤーグループを追加するために使用できます。
レイヤーグループを作成する手順は以下の通りです:
- 指定した幅、高さ、および画像オプションを使用して、PsdImageクラスの画像インスタンスを作成します。
- 指定したグループ名とインデックスでLayerGroupを作成します。
- Layerクラスのインスタンスを作成し、PSD画像をそれに割り当てます。
- LayerGroupクラスによって公開されたAddLayerメソッドを使用して作成したレイヤーをレイヤーグループに追加します。
- 結果を保存します。
以下のコードスニペットはレイヤーグループを作成する方法を示しています。
// 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"); | |
} |
レイヤーの名前変更
任意の名前を使用できますが、通常の慣行はそのレイヤーにあるオブジェクトや要素の一般的な説明を使用することです。この記事では、Aspose.PSD for .NETを使用してレイヤーの名前を変更する方法を示しています。そのために、Layerクラスに表示名を正しく表示するための新しいプロパティDisplayNameが追加されました。Photoshopがレイヤー名をNameプロパティを使用して保存すると、韓国語の文字はASCIIでバイト63 ‘?‘として保存されることが観察されています。そのため、レイヤー名を適切に表示したい場合はDisplayNameプロパティを使用してください。Nameプロパティは韓国語の文字をサポートしていないためです。
以下のコードサンプルは、レイヤーの名前を変更する方法を示しています。
// 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"); | |
} |
リンクレイヤーのサポート
レイヤーをリンクすることは、レイヤーをグループ化することと同じです。2つ以上のレイヤーをリンクすると、リンクされたレイヤーの両方に特定の変更を行うことが可能になります。たとえば、1つのレイヤーに変換を適用すると、他のすべてのリンクされたレイヤーにも適用されます。この記事では、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"); | |
} |