Cách làm việc với Aspose.PSD FOSS Core API trong .NET
Aspose.PSD FOSS cho .NET tải và kiểm tra cấu trúc tài liệu PSD/PSB thông qua PsdImage, một lớp con của Image. Bài viết này đề cập đến việc tải tài liệu, đọc phần đầu và các tài nguyên hình ảnh, và lưu lại vào đĩa.
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
using Aspose.PSD.FileFormats.Psd;Bước 3: Tải tài liệu PSD/PSB
PsdImage.Load mở một tài liệu từ đường dẫn tệp hoặc một luồng:
using var image = PsdImage.Load("input.psd");Bước 4: Kiểm tra tiêu đề tài liệu
PsdImage hiển thị các trường tiêu đề được đọc từ tài liệu đã phân tích: Width, Height, BitsPerChannel, ColorMode (một giá trị ColorModes), và Compression (một giá trị CompressionMethod):
Console.WriteLine($"{image.Width}x{image.Height}, {image.BitsPerChannel} bpc");
Console.WriteLine($"Color mode: {image.ColorMode}"); // e.g. ColorModes.Rgb
Console.WriteLine($"Compression: {image.Compression}"); // e.g. CompressionMethod.RLE
Console.WriteLine($"Flattened: {image.IsFlatten}");Các giá trị ColorModes bao gồm Bitmap, Grayscale, Indexed, Rgb và Cmyk, trong số các giá trị khác (Multichannel, Duotone, Lab). Các giá trị CompressionMethod là Raw, RLE, ZipWithoutPrediction, và một biến thể ZIP-có-dựđoán.
Bước 5: Đọc các khối tài nguyên hình ảnh
ImageResources trả về các mục ResourceBlock đã phân tích của tài liệu. Mỗi khối hiển thị ID, Name, và Size:
foreach (var resource in image.ImageResources)
{
Console.WriteLine($"Resource {resource.ID} \"{resource.Name}\" - {resource.Size} bytes");
}ImageResources là chỉ đọc trong bản FOSS này — việc gán giá trị cho nó sẽ gây lỗi NotSupportedException (xem Các hạn chế đã biết trong FAQ).
Bước 6: Lưu tài liệu
image.Save("output.psd");Các vấn đề thường gặp và cách khắc phục
PsdLoadException khi tải tệp. Đầu vào không phải là tài liệu PSD/PSB hợp lệ, hoặc phần đầu của nó không vượt qua quá trình xác thực. Xác nhận tệp là tệp PSD/PSB thực sự trước khi tải.
NotSupportedException khi thiết lập ImageResources or GlobalLayerResources. Các setter này không được hỗ trợ trong bản FOSS này. Xem như ImageResources là chỉ đọc.
ColorMode or Compression in ra dưới dạng giá trị số thay vì tên. Ép kiểu thuộc tính sang kiểu enum của nó một cách rõ ràng, hoặc sử dụng .ToString(), để lấy tên có thể đọc được (ColorModes.Rgb, không 3).
Các câu hỏi thường gặp
Tôi có thể tải tệp PSD từ một luồng thay vì từ đường dẫn tệp không?
Yes — PsdImage.Load có một overload chấp nhận Stream.
Liệu ImageResources có bao gồm dữ liệu lớp không?
Không. ImageResources chứa các khối tài nguyên cấp tài liệu (được phân tích từ phần tài nguyên hình ảnh PSD). Dữ liệu cấp lớp được đọc qua PsdImage.Layers — xem Làm việc với các lớp.
Có phải PsdImage.Version là phiên bản định dạng tệp PSD không?
Không. PsdImage.Version báo cáo một số phiên bản API nội bộ tương thích với Aspose.PSD (hiện tại là 6) — nó không liên quan đến việc tệp đã tải là PSD hay PSB.