Cách kiểm tra các phần tài liệu PSD trong Python
Một PsdImage đã tải sẽ hiển thị các đối tượng tóm tắt chỉ-đọc cho các phần cấu trúc của tài liệu PSD/PSB — phần tiêu đề, phần dữ liệu màu, phần dữ liệu hình ảnh và phần tài nguyên hình ảnh — mà không cần thực hiện bất kỳ việc phân tích cấp byte thủ công nào.
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-Python.git
cd Aspose.PSD-FOSS-for-Python
# No packaging manifest is published yet -- run from this folder,
# or add it to PYTHONPATH:
export PYTHONPATH=$PWD:$PYTHONPATHBước 2: Nhập Các Lớp Cần Thiết
from aspose_psd_foss.psdimage import PsdImageBước 3: Kiểm Tra Phần Tiêu Đề
PsdImage.header trả về một PsdHeader với các trường cấu trúc thô của tài liệu:
image = PsdImage.load("input.psd")
header = image.header
print(f"Size: {header.width}x{header.height}, channels: {header.channels}")
print(f"Bit depth: {header.bit_depth}, raw color mode: {header.color_mode}")
print(f"Is PSB: {header.is_large_document}")PsdHeader.color_mode trả về trường chế độ màu nguyên số thô như được lưu trong tệp — hãy dùng PsdImage.color_mode thay thế nếu bạn cần enum ColorModes được gõ mạnh.
Bước 4: Kiểm tra phần dữ liệu màu
PsdImage.color_data_info trả về một bản tóm tắt PsdColorDataInfo; kind là một giá trị PsdColorDataKind (NONE, INDEXED_PALETTE, RGB_PAYLOAD, CMYK_PAYLOAD, hoặc RAW_PRESERVED):
if image.has_color_mode_data:
color_info = image.color_data_info
print(f"Color data kind: {color_info.kind}, raw bytes: {color_info.raw_data_length}")
if color_info.indexed_palette is not None:
print(f"Indexed palette entries: {len(color_info.indexed_palette.entries)}")Bước 5: Kiểm tra phần dữ liệu hình ảnh
PsdImage.image_data_info trả về một bản tóm tắt PsdImageDataInfo mô tả cách dữ liệu pixel đã hợp nhất được mã hoá:
data_info = image.image_data_info
print(f"Compression: {image.compression}")
print(f"Data kind: {data_info.kind}, uses prediction: {data_info.uses_prediction}")
print(f"Compressed payload length: {data_info.compressed_payload_length}")data_info.kind là một giá trị ImageDataKind (RAW, RLE, ZIP, hoặc UNKNOWN) mô tả mã hoá riêng của dữ liệu hình ảnh đã hợp nhất — image.compression báo cáo cùng một mã hoá thông qua enum CompressionMethod riêng.
Bước 6: Kiểm tra phần tài nguyên hình ảnh
print(f"Has image resources: {image.has_image_resources}")
print(f"Resource count: {image.resource_count}")
for resource in image.resources:
print(f"Resource ID: {resource.resource_id}, kind: {resource.kind}")PsdImage.resources trả về chỉ đọc PsdResourceInfo tóm tắt. Phần riêng PsdImage.image_resources thuộc tính cũng có một getter, nhưng setter của nó gây ra NotSupportedException trong bản dựng FOSS này — xem Troubleshooting đối với danh sách đầy đủ các setter chỉ đọc.
Các vấn đề thường gặp và cách khắc phục
header.color_mode không khớp image.color_mode. Điều này là mong đợi — PsdHeader.color_mode là trường nguyên thô từ tệp, trong khi PsdImage.color_mode là kiểu mạnh ColorModes enum được tạo từ nó.
color_data_info.indexed_palette is None. Kiểu dữ liệu màu của tài liệu không phải là INDEXED_PALETTE — chỉ các tài liệu màu chỉ mục mới có bảng màu.
Setting image.image_resources raises NotSupportedException. Bộ thiết lập này không được hỗ trợ trong bản xây dựng FOSS này; coi image_resources and resources như chỉ đọc.
Câu hỏi thường gặp
Tôi có thể sửa đổi trực tiếp các phần header, dữ liệu màu, hoặc dữ liệu ảnh không?
Không — PsdHeader, PsdColorDataInfo, ColorData và PsdImageDataInfo đều là các đối tượng tóm tắt chỉ đọc trong bản dựng FOSS này. Không có bộ setter công khai nào trên bất kỳ thuộc tính nào của chúng.
Sự khác biệt giữa image.compression và image.image_data_kind là gì?
Chúng mô tả cùng một mã hoá nền tảng qua hai enum riêng biệt: image.compression trả về một giá trị CompressionMethod, trong khi image.image_data_info.kind trả về một giá trị ImageDataKind.