В этой статье вы узнаете, как динамически находить слои и обновлять текст или изображение слоя в PSD-файлах Photoshop с помощью C# .NET.

PSD — это формат по умолчанию, используемый Adobe Photoshop для сохранения своих документов в многослойной структуре, где каждый слой содержит текст, изображения, графические объекты и другие поддерживаемые элементы. Может быть случай, когда у вас есть шаблон PSD, и вам нужно создать несколько результирующих изображений, заполнив слои текста и изображения в шаблоне. Примером такого сценария является создание карточек сотрудников внутри организации. Чтобы автоматизировать этот процесс, я покажу вам, как:

Библиотека C# для поиска и обновления слоев PSD

Aspose.PSD для .NET позволяет создавать и изменять файлы PSD без установки Adobe Photoshop или Illustrator. API может быть полезен в тех случаях, когда вам необходимо динамически обновлять слои PSD с помощью C# или VB.NET. Вы можете установить API с помощью Диспетчера пакетов NuGet или загрузить и указать ссылки на его DLL вручную.

Поиск и обновление текстовых слоев в PSD-файлах с помощью C#

Aspose.PSD для .NET позволяет найти нужный слой в файлах PSD, используя имя слоя. Найдя слой, вы можете обновить его содержимое. Ниже приведены шаги по поиску и обновлению текстового слоя в PSD-файле.

  • Создайте экземпляр класса PsdImage и инициализируйте его, указав путь к файлу PSD.
  • Получите доступ к слоям в PSD, используя свойство PsdImage.Layers.
  • Сопоставьте отображаемое имя каждого слоя, чтобы получить нужный слой в объекте TextLayer.
  • Обновите текст с помощью метода TextLayer.UpdateText(String).
  • Сохраните обновленное изображение с помощью метода PsdImage.Save(String).

В следующем примере кода показано, как найти и обновить текстовый слой в PSD-файле с помощью C#.

// Загрузить 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 файле
	var layers = image.Layers;
	// Найдите нужный слой
	foreach (var layer in layers)
	{
		// Соответствие имени слоя
		if (string.Equals(layer.DisplayName, layerName, StringComparison.InvariantCultureIgnoreCase))
		{
			return layer;
		}
	}
	return null;
}

Ниже приведен скриншот входного PSD-файла, который мы использовали в этом примере:

Найти слой в PSD с помощью C#

Ниже представлен результирующий PSD-файл с обновленным текстовым слоем:

Обновить текстовый слой в PSD с помощью C#

Поиск и обновление слоев изображения в PSD-файлах с помощью C#

Для работы с графическими объектами, такими как изображения, Aspose.PSD для .NET предоставляет класс Graphics. Этот класс используется для очистки или рисования графики в слоях PSD. Ниже приведены шаги для поиска слоя PSD и обновления его изображения.

  • Создайте объект класса PsdImage для загрузки файла PSD.
  • Найдите слой в файле PSD из объекта PsdImage.Layers.
  • Загрузите изображение, которое вы хотите нарисовать в слое в объекте Stream.
  • Создайте новый объект Layer и инициализируйте его с помощью объекта Stream, созданного на предыдущем шаге.
  • Создайте экземпляр класса Graphics и инициализируйте его заменяемым слоем.
  • Очистите слой методом Graphics.Clear().
  • Нарисуйте изображение в слое, используя метод Graphics.DrawImage(Image, Rectangle).
  • Сохраните файл с помощью метода PsdImage.Save(String).

В следующем примере кода показано, как найти и обновить слои изображения в PSD-файле с помощью C#.

// Загрузить 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 файле
	var layers = image.Layers;
	// Найдите нужный слой
	foreach (var layer in layers)
	{
		// Соответствие имени слоя
		if (string.Equals(layer.DisplayName, layerName, StringComparison.InvariantCultureIgnoreCase))
		{
			return layer;
		}
	}
	return null;
}

Ниже приведен снимок экрана PSD-файла после обновления слоя изображения с использованием вышеупомянутого кода:

Обновить слой изображения в PSD с помощью C#

Вывод

В этой статье мы увидели, как найти и обновить слои в файле Photoshop (PSD) с помощью C#. Пошаговое руководство и примеры кода демонстрируют, как находить слои и обновлять их текст или изображение в PSD-файлах Photoshop. Вы можете узнать больше об Aspose.PSD для .NET, используя документацию.

Смотрите также