Trong bài viết này, bạn sẽ học cách tìm các lớp và cập nhật văn bản hoặc hình ảnh của lớp đó trong các tệp PSD của Photoshop một cách linh hoạt bằng C# .NET.

PSD là định dạng mặc định được Adobe Photoshop sử dụng để lưu tài liệu của nó trong cấu trúc nhiều lớp trong đó mỗi lớp chứa văn bản, hình ảnh, đối tượng đồ họa và các thành phần được hỗ trợ khác. Có thể xảy ra trường hợp khi bạn có một mẫu PSD và bạn cần tạo một số hình ảnh kết quả bằng cách điền các lớp văn bản và hình ảnh trong mẫu. Một ví dụ về tình huống như vậy là tạo thẻ nhân viên trong một tổ chức. Để tự động hóa quy trình này, tôi sẽ chỉ cho bạn cách:

Thư viện C# để tìm và cập nhật các lớp PSD

Aspose.PSD cho .NET cho phép tạo và sửa đổi các tệp PSD mà không cần cài đặt Adobe Photoshop hoặc Illustrator. API có thể hữu ích trong trường hợp bạn cần cập nhật động các lớp PSD bằng C# hoặc VB.NET. Bạn có thể cài đặt API bằng cách sử dụng NuGet Package Manager hoặc tải xuống và tham khảo DLLs theo cách thủ công.

Tìm và cập nhật các lớp văn bản trong tệp PSD bằng C#

Aspose.PSD cho .NET cho phép bạn tìm thấy lớp mong muốn trong các tệp PSD bằng cách sử dụng tên của lớp. Khi bạn tìm thấy lớp, bạn có thể cập nhật nội dung của nó. Sau đây là các bước để tìm và cập nhật lớp văn bản trong tệp PSD.

  • Tạo một thể hiện của lớp PsdImage và khởi tạo nó bằng đường dẫn của tệp PSD.
  • Truy cập các lớp trong PSD bằng thuộc tính PsdImage.Layers.
  • Khớp tên hiển thị của từng lớp để có được lớp mong muốn vào đối tượng TextLayer.
  • Cập nhật văn bản bằng phương pháp TextLayer.UpdateText(String).
  • Lưu hình ảnh đã cập nhật bằng phương pháp PsdImage.Save(String).

Mẫu mã sau đây cho biết cách tìm và cập nhật lớp văn bản trong tệp PSD bằng C#.

// Tải tệp PSD
using (PsdImage image = (PsdImage)Image.Load(@"template.psd"))
{
	// Tìm Lớp bằng tên của lớp
	var layerToUpdateText = (TextLayer)FindLayer("Name", image);
	// Cách đơn giản để cập nhật văn bản
	layerToUpdateText.UpdateText("John Doe");
	// Lưu tệp PSD đã cập nhật
	image.Save("updated-psd.psd");
}
//-------------------FindLayer()-----------
public static Layer FindLayer(string layerName, PsdImage image)
{
	// Nhận các lớp aa trong tệp PSD
	var layers = image.Layers;
	// Tìm lớp mong muốn
	foreach (var layer in layers)
	{
		// Khớp tên lớp
		if (string.Equals(layer.DisplayName, layerName, StringComparison.InvariantCultureIgnoreCase))
		{
			return layer;
		}
	}
	return null;
}

Dưới đây là ảnh chụp màn hình của tệp PSD đầu vào mà chúng tôi đã sử dụng trong ví dụ này:

Tìm lớp trong PSD bằng C#

Sau đây là tệp PSD kết quả có lớp văn bản được cập nhật:

Cập nhật lớp văn bản trong PSD bằng C#

Tìm và cập nhật các lớp hình ảnh trong tệp PSD bằng C#

Để xử lý các đối tượng đồ họa như hình ảnh, Aspose.PSD cho .NET hiển thị lớp Đồ họa. Lớp này được sử dụng để xóa hoặc vẽ đồ họa trong các lớp PSD. Sau đây là các bước để tìm một lớp PSD và cập nhật hình ảnh của nó.

  • Tạo một đối tượng thuộc lớp PsdImage để tải tệp PSD.
  • Tìm lớp trong tệp PSD từ đối tượng PsdImage.Layers.
  • Tải hình ảnh bạn muốn vẽ trong lớp trong đối tượng Stream.
  • Tạo đối tượng Layer mới và khởi tạo nó với đối tượng Stream đã tạo ở bước trước.
  • Tạo một thể hiện của lớp Graphics và khởi tạo nó bằng lớp sẽ được thay thế.
  • Xóa lớp bằng phương pháp Graphics.Clear().
  • Vẽ hình ảnh trong lớp bằng phương pháp Graphics.DrawImage(Image, Rectangle).
  • Lưu tệp bằng phương thức PsdImage.Save(String).

Mẫu mã sau đây cho biết cách tìm và cập nhật các lớp hình ảnh trong tệp PSD bằng C#.

// Tải tệp PSD
using (PsdImage image = (PsdImage)Image.Load(@"updated-psd.psd"))
{
	// Hãy tìm layer mà chúng ta muốn thay thế
	var layerToReplace = FindLayer("ProfilePicture", image);

	using (Stream stream = new FileStream(@"avatar.png", FileMode.Open))
	{
		var newLayer = new Layer(stream);
		// Vẽ lớp mới trên lớp cũ
		var graphic = new Graphics(layerToReplace);
		graphic.Clear(Color.Empty);
		graphic.DrawImage(newLayer, new Rectangle(new Point(), new Size(layerToReplace.Width, layerToReplace.Height)));
	}
	// Lưu tệp PSD đã cập nhật
	image.Save("updated-psd2.psd");
}
//-------------------FindLayer()-----------
public static Layer FindLayer(string layerName, PsdImage image)
{
	// Nhận các lớp aa trong tệp PSD
	var layers = image.Layers;
	// Tìm lớp mong muốn
	foreach (var layer in layers)
	{
		// Khớp tên lớp
		if (string.Equals(layer.DisplayName, layerName, StringComparison.InvariantCultureIgnoreCase))
		{
			return layer;
		}
	}
	return null;
}

Sau đây là ảnh chụp màn hình của tệp PSD sau khi cập nhật lớp hình ảnh bằng mã nêu trên:

Cập nhật lớp hình ảnh trong PSD bằng C#

Sự kết luận

Trong bài viết này, chúng ta đã biết cách tìm và cập nhật các lớp trong tệp Photoshop (PSD) bằng C#. Hướng dẫn từng bước và các mẫu mã minh họa cách tìm các lớp và cập nhật văn bản hoặc hình ảnh của chúng trong các tệp PSD của Photoshop. Bạn có thể khám phá thêm về Aspose.PSD cho .NET bằng cách sử dụng tài liệu.

Xem thêm