この記事では、C#.NETを使用して、レイヤーを検索し、PhotoshopのPSDファイル内のレイヤーのテキストまたは画像を動的に更新する方法を学習します。

PSDは、Adobe Photoshopがドキュメントを多層構造で保存するために使用するデフォルトの形式であり、各レイヤーにはテキスト、画像、グラフィックオブジェクト、およびその他のサポートされている要素が含まれます。 PSDテンプレートがあり、テンプレート内にテキストと画像のレイヤーを入力して、いくつかの結果の画像を作成する必要がある場合があります。このようなシナリオの例は、組織内で従業員カードを作成することです。このプロセスを自動化するために、次の方法を紹介します。

PSDレイヤーを検索および更新するためのC#ライブラリ

Aspose.PSD for .NETを使用すると、AdobePhotoshopやIllustratorをインストールせずにPSDファイルを作成および変更できます。 APIは、C#またはVB.NETを使用してPSDレイヤーを動的に更新する必要があるシナリオで便利です。 NuGet Package Managerを使用してAPIをインストールするか、DLLを手動でダウンロードして参照できます。

C#を使用してPSDファイルのテキストレイヤーを検索および更新する

Aspose.PSD for .NETを使用すると、レイヤーの名前を使用して、PSDファイルで目的のレイヤーを見つけることができます。レイヤーを見つけたら、そのコンテンツを更新できます。以下は、PSDファイル内のテキストレイヤーを検索して更新する手順です。

  • PsdImageクラスのインスタンスを作成し、PSDファイルのパスで初期化します。
  • PsdImage.Layersプロパティを使用して、PSDのレイヤーにアクセスします。
  • 各レイヤーの表示名を一致させて、目的のレイヤーをTextLayerオブジェクトに入れます。
  • TextLayer.UpdateText(String)メソッドを使用してテキストを更新します。
  • PsdImage.Save(String)メソッドを使用して、更新された画像を保存します。

次のコードサンプルは、C#を使用してPSDファイルのテキストレイヤーを検索して更新する方法を示しています。

// PSDファイルをロード
using (PsdImage image = (PsdImage)Image.Load(@"template.psd"))
{
	// レイヤーの名前を使用してレイヤーを検索
	var layerToUpdateText = (TextLayer)FindLayer("Name", image);
	// テキストを更新する簡単な方法
	layerToUpdateText.UpdateText("John Doe");
	// 更新されたPSDファイルを保存します
	image.Save("updated-psd.psd");
}
//------------------- FindLayer()-------------
public static Layer FindLayer(string layerName, PsdImage image)
{
	// PSDファイルでaaレイヤーを取得します
	var layers = image.Layers;
	// 目的のレイヤーを見つける
	foreach (var layer in layers)
	{
		// レイヤーの名前と一致する
		if (string.Equals(layer.DisplayName, layerName, StringComparison.InvariantCultureIgnoreCase))
		{
			return layer;
		}
	}
	return null;
}

以下は、この例で使用した入力PSDファイルのスクリーンショットです。

C#を使用してPSDでレイヤーを検索する

以下は、更新されたテキストレイヤーを持つ結果のPSDファイルです。

C#を使用してPSDのテキストレイヤーを更新する

C#を使用してPSDファイルの画像レイヤーを検索および更新する

画像などのグラフィックオブジェクトを処理するために、Aspose.PSDfor.NETはGraphicsクラスを公開します。このクラスは、PSDレイヤー内のグラフィックをクリアまたは描画するために使用されます。以下は、PSDレイヤーを見つけてその画像を更新する手順です。

  • PsdImageクラスのオブジェクトを作成して、PSDファイルをロードします。
  • PsdImage.LayersオブジェクトからPSDファイルでレイヤーを見つけます。
  • レイヤーに描画する画像をStreamオブジェクトにロードします。
  • 新しいLayerオブジェクトを作成し、前の手順で作成したStreamオブジェクトで初期化します。
  • Graphicsクラスのインスタンスを作成し、置き換えるレイヤーで初期化します。
  • Graphics.Clear()メソッドを使用してレイヤーをクリアします。
  • Graphics.DrawImage(Image、Rectangle)メソッドを使用して、レイヤーに画像を描画します。
  • PsdImage.Save(String)メソッドを使用してファイルを保存します。

次のコードサンプルは、C#を使用してPSDファイル内の画像レイヤーを検索および更新する方法を示しています。

// PSDファイルをロード
using (PsdImage image = (PsdImage)Image.Load(@"updated-psd.psd"))
{
	// 置き換えたいレイヤーを見つけましょう
	var layerToReplace = FindLayer("ProfilePicture", image);

	using (Stream stream = new FileStream(@"avatar.png", FileMode.Open))
	{
		var newLayer = new Layer(stream);
		// 古い上に新しいレイヤーを描画する
		var graphic = new Graphics(layerToReplace);
		graphic.Clear(Color.Empty);
		graphic.DrawImage(newLayer, new Rectangle(new Point(), new Size(layerToReplace.Width, layerToReplace.Height)));
	}
	// 更新されたPSDファイルを保存します
	image.Save("updated-psd2.psd");
}
//------------------- FindLayer()-------------
public static Layer FindLayer(string layerName, PsdImage image)
{
	// PSDファイルでaaレイヤーを取得します
	var layers = image.Layers;
	// 目的のレイヤーを見つける
	foreach (var layer in layers)
	{
		// レイヤーの名前と一致する
		if (string.Equals(layer.DisplayName, layerName, StringComparison.InvariantCultureIgnoreCase))
		{
			return layer;
		}
	}
	return null;
}

以下は、上記のコードを使用して画像レイヤーを更新した後のPSDファイルのスクリーンショットです。

C#を使用してPSDの画像レイヤーを更新する

結論

この記事では、C#を使用してPhotoshopファイル(PSD)のレイヤーを見つけて更新する方法を見てきました。ステップバイステップガイドとコードサンプルは、PhotoshopのPSDファイルでレイヤーを見つけてそのテキストまたは画像を更新する方法を示しています。 ドキュメントを使用して、Aspose.PSDfor.NETの詳細を調べることができます。

関連項目