Layers
Layers
PsdImage.Layers trả về mọi lớp đã phân tích dưới dạng một mảng Layer. Mỗi Layer hiển thị geometry, visibility và compositing state riêng, cùng với metadata về các channels, mask và blending ranges.
Đọc Metadata Lớp
Tất cả Name, Bounds (và các loại được suy ra Width/Height/Top/Left/Bottom/Right), IsVisible, Opacity, Clipping, BlendModeKey, và ChannelsCount đều có thể đọc trực tiếp.
foreach (Layer layer in image.Layers)
{
Console.WriteLine($"{layer.Name}: {layer.Bounds}, " +
$"Visible={layer.IsVisible}, Opacity={layer.Opacity}, " +
$"BlendMode={layer.BlendModeKey}");
}Các chỉnh sửa Metadata được hỗ trợ
Name, IsVisible, Opacity, Clipping, BlendModeKey, và bốn cạnh giới hạn (Top/Left/Bottom/Right) có thể được thay đổi ngay tại chỗ và ghi lại bằng PsdImage.Save().
Layer layer = image.Layers[0];
layer.Name = $"{layer.Name} (edited)";
layer.IsVisible = !layer.IsVisible;
layer.Opacity = 128;
layer.BlendModeKey = BlendMode.Multiply;
image.Save(outputPath);Metadata Kênh và Mask
ChannelInformation, LayerMaskData và LayerBlendingRangesData là chỉ đọc trong bản FOSS này — các setter của chúng sẽ ném NotSupportedException.
foreach (ChannelInformation channel in layer.ChannelInformation)
{
Console.WriteLine($"Channel {channel.ChannelID}: {channel.CompressionMethod}, {channel.Length} bytes");
}
if (layer.LayerMaskData is { } mask)
{
Console.WriteLine($"Mask bounds: {mask.MaskRectangle}, flags: {mask.Flags}");
}Xóa hoặc Sắp xếp Lại Các Lớp
PsdImage.Layers có cả setter và getter: gán một mảng đã được lọc hoặc sắp xếp lại sẽ thay thế bộ sưu tập lớp của tài liệu. Không có cách công khai nào để tạo một thể hiện Layer mới hoàn toàn, vì vậy tính năng này chỉ hỗ trợ việc xóa hoặc sắp xếp lại các lớp đã có — không thêm lớp mới từ đầu.
// Keep only visible layers
image.Layers = image.Layers.Where(layer => layer.IsVisible).ToArray();
image.Save(outputPath);Mẹo và Thực hành Tốt nhất
- Chỉ mục vào
image.Layerstheo vị trí; thứ tự mảng phù hợp với thứ tự lớp của tài liệu. BlendModeKeychấp nhận bất kỳ giá trị enumBlendModenào — không có việc xác thực nào được thực hiện so với chế độ màu đã khai báo của tài liệu.ChannelInformation,LayerMaskDatavàLayerBlendingRangesDatacó thể đọc được nhưng không bao giờ được gán lại.- Gọi
PsdImage.Save()một lần sau khi hoàn tất tất cả các chỉnh sửa; mỗi lần gọi sẽ ghi toàn bộ tài liệu.
Các vấn đề thường gặp
| Vấn đề | Nguyên nhân | Khắc phục |
|---|---|---|
NotSupportedException khi thiết lập ChannelInformation, LayerMaskData hoặc LayerBlendingRangesData | Ba thuộc tính này là chỉ-đọc trong bản FOSS mặc dù có setter | Đọc giá trị; không cố gắng gán lại nó |
LayerMaskData là null cho một lớp | Không phải mọi lớp đều có phần phụ mask | Kiểm tra null trước khi sử dụng (layer.LayerMaskData is { } mask) |
FAQ
Tôi có thể xóa một lớp không?
Có — gán lại image.Layers thành một mảng đã lọc. Bạn không thể thêm một lớp mới hoàn toàn, vì Layer không có hàm tạo công khai; chỉ các lớp đã được phân tích hiện có có thể được giữ lại, xóa hoặc sắp xếp lại.
Tôi có thể thay đổi kênh hoặc dữ liệu mặt nạ của một lớp không?
Không. ChannelInformation, LayerMaskData và LayerBlendingRangesData chỉ đọc — chỉ Name, IsVisible, Opacity, Clipping, BlendModeKey và các cạnh giới hạn mới có thể được thay đổi.
Tóm tắt API Reference
| Lớp/Phương thức | Mô tả |
|---|---|
PsdImage.Layers | Lấy hoặc đặt bộ sưu tập lớp — chỉ có thể đặt để xóa/định thứ tự lại |
Layer.Name / IsVisible / Opacity / Clipping / BlendModeKey / Top / Left / Bottom / Right | Các chỉnh sửa siêu dữ liệu lớp được hỗ trợ |
Layer.Bounds / Width / Height / ChannelsCount | Hình học lớp chỉ đọc |
Layer.ChannelInformation / LayerMaskData / LayerBlendingRangesData | Siêu dữ liệu kênh/mặt nạ/phối màu chỉ đọc |