Cách lưu và xuất tài liệu PSD trong Python
Hướng dẫn này chỉ ra cách lưu một tài liệu đã chỉnh sửa vào đường dẫn tệp, vào một luồng mở, và cách giải phóng một hình ảnh đã tải sau đó. PsdImage.save là điểm vào công cộng duy nhất để ghi lại tài liệu — nó chấp nhận cả đường dẫn tệp hoặc một luồng ghi đã mở sẵn. Trình ghi phần thấp thực hiện mã hoá byte thực tế là chi tiết triển khai nội bộ, không phải thứ bạn gọi trực tiếp.
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
PsdImage là lớp duy nhất mà các ví dụ trong hướng dẫn này cần:
from aspose_psd_foss.psdimage import PsdImageBước 3: Lưu vào Đường dẫn Tệp
Tải một tài liệu, thực hiện chỉnh sửa, rồi lưu lại vào đường dẫn tệp:
image = PsdImage.load("input.psd")
image.layers[0].is_visible = False
image.save("output.psd")Bước 4: Lưu vào Luồng Mở
Việc truyền một luồng thay vì một đường dẫn sẽ để luồng mở sau khi lưu — bạn kiểm soát thời điểm đóng nó:
with open("output.psd", "wb") as stream:
image.save(stream)Bước 5: Giải phóng Ảnh
Giải phóng các tài nguyên mà PsdImage đã tải giữ lại sau khi bạn hoàn thành:
image.dispose()Các vấn đề thường gặp và cách khắc phục
RuntimeError: PsdImage has been disposed. khi gọi save. Hình ảnh đã được giải phóng (qua dispose() hoặc một with khối đã thoát) trước save được gọi. Gọi save trước khi giải phóng.
PsdSaveException về độ dài chuỗi Pascal. Giá trị chuỗi vượt quá 255 byte — xem Xử lý các ngoại lệ Core PSD and Troubleshooting.
Không có cách nào để ép buộc một container PSD hoặc PSB khi lưu. Không có API công khai nào để chọn định dạng container đầu ra — quá trình lưu luôn phản ánh định dạng mà tài liệu được tải lên (is_large_document / is_psb) tài liệu được tải lên. Nếu bạn cần một định dạng container khác, không có đường chuyển đổi được hỗ trợ trong bản dựng FOSS này.
Câu hỏi thường gặp
Việc lưu vào một stream có đóng stream sau đó không?
Không — khi bạn truyền một stream cho save, stream sẽ được để mở sau đó để bạn kiểm soát vòng đời của nó (xem Bước 4). Ngược lại, việc lưu vào một đường dẫn tệp sẽ mở và đóng tệp nội bộ.
Tôi có thể gọi trực tiếp bộ ghi phần nội bộ thay vì save không?
Không — bộ ghi cấp độ phần là chi tiết triển khai nội bộ được PsdImage.save gọi. Không có cách nào được tài liệu ghi lại và hỗ trợ để ghi một tài liệu mà không gọi save trên một thể hiện PsdImage.