Cách làm việc với các lớp PSD trong .NET
Hướng dẫn này trình bày cách liệt kê các lớp của tài liệu, đọc và chỉnh sửa siêu dữ liệu có thể thay đổi của lớp, thay đổi vị trí của một lớp, và xóa một lớp khỏi tập hợp. Thuộc tính Layers của PsdImage đã tải sẽ trả về tập hợp các đối tượng Layer. Mỗi Layer cung cấp siêu dữ liệu có thể chỉnh sửa — tên, hiển thị, độ mờ, cắt, chế độ hòa trộn và vị trí (các cạnh giới hạn) — cùng với thông tin giới hạn tổng thể và kênh chỉ đọc.
Hướng dẫn từng bước
Bước 1: Cài đặt gói
git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-.NET.git
cd Aspose.PSD-FOSS-for-.NET
dotnet buildBước 2: Nhập các lớp cần thiết
Các phương thức mở rộng LINQ được sử dụng sau (Where) đến từ System.Linq; các kiểu đặc thù cho PSD đến từ hai không gian tên Aspose.PSD dưới đây.
using System.Linq;
using Aspose.PSD.FileFormats.Psd;
using Aspose.PSD.FileFormats.Core.Blending;Bước 3: Tải tài liệu và liệt kê các lớp của nó
Tải tài liệu, sau đó lặp qua Layers để xem tên và hình học của từng lớp:
using var image = PsdImage.Load("input.psd");
foreach (var layer in image.Layers)
{
Console.WriteLine($"{layer.Name}: {layer.Width}x{layer.Height} at ({layer.Left},{layer.Top})");
}Bước 4: Đọc và chỉnh sửa khả năng hiển thị, độ trong suốt và chế độ hòa trộn của lớp
IsVisible, Opacity (0-255), Clipping, Name và BlendModeKey đều có các setter đang hoạt động:
var layer = image.Layers[0];
layer.IsVisible = false; // hide the layer
layer.Opacity = 200; // ~78% opacity
layer.BlendModeKey = BlendMode.Multiply;
layer.Name = "Renamed Layer";Bước 5: Đọc và đặt lại vị trí giới hạn của lớp
Bounds, Width, Height và ChannelsCount chỉ đọc — nhưng Top, Left, Bottom và Right mỗi cái đều có một setter có thể thay đổi vị trí lớp:
Console.WriteLine($"Bounds: {layer.Bounds}");
Console.WriteLine($"Channels: {layer.ChannelsCount}");
layer.Left = 10;
layer.Top = 20;
layer.Right = 40;
layer.Bottom = 60;Bước 6: Thay thế tập hợp các lớp
PsdImage.Layers tự nó có một setter đang hoạt động, vì vậy bạn có thể thay thế toàn bộ tập hợp (ví dụ, để xóa một lớp):
image.Layers = image.Layers.Where(l => l.Name != "Renamed Layer").ToArray();Bước 7: Lưu tài liệu
Lưu lại mọi chỉnh sửa đã thực hiện ở các bước trước vào đĩa:
image.Save("output.psd");Các vấn đề thường gặp và cách khắc phục
NotSupportedException khi thiết lập ChannelInformation, LayerMaskData, hoặc LayerBlendingRangesData. Ba cái này Layer các setter không được hỗ trợ trong bản dựng FOSS này — coi chúng như chỉ đọc.
Giá trị độ mờ trông không đúng sau khi đặt nó. Opacity là một byte (0-255), không phải là phân số 0.0-1.0 hay phần trăm — layer.Opacity = 200 có nghĩa khoảng 78% mờ (200/255).
Thay đổi đối với một lớp không hiển thị sau khi lưu. Xác nhận bạn đang sửa đổi Layer đối tượng nhận được từ image.Layers, và rằng bạn gọi image.Save sau khi thực hiện các chỉnh sửa của mình.
Câu hỏi thường gặp
Tôi có thể xóa một lớp khỏi tài liệu không?
Có — PsdImage.Layers có một setter hoạt động, vì vậy bạn có thể gán cho nó một mảng đã lọc để loại bỏ các lớp (xem Bước 6).
Các chế độ hòa trộn nào có sẵn?
BlendMode bao gồm các giá trị như Normal, Multiply, Screen, Overlay và Darken, trong số các giá trị khác — được thiết lập qua Layer.BlendModeKey.
Dữ liệu mặt nạ lớp có sẵn không?
Layer.LayerMaskData có một getter hoạt động, nhưng setter của nó ném NotSupportedException trong bản FOSS này.