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.Layers theo vị trí; thứ tự mảng phù hợp với thứ tự lớp của tài liệu.
  • BlendModeKey chấp nhận bất kỳ giá trị enum BlendMode nà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, LayerMaskData và LayerBlendingRangesData có 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ânKhắc phục
NotSupportedException khi thiết lập ChannelInformation, LayerMaskData hoặc LayerBlendingRangesDataBa 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ớpKhông phải mọi lớp đều có phần phụ maskKiể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ứcMô tả
PsdImage.LayersLấ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 / RightCác chỉnh sửa siêu dữ liệu lớp được hỗ trợ
Layer.Bounds / Width / Height / ChannelsCountHình học lớp chỉ đọc
Layer.ChannelInformation / LayerMaskData / LayerBlendingRangesDataSiêu dữ liệu kênh/mặt nạ/phối màu chỉ đọc

Xem thêm

 Tiếng Việt