Cách làm việc với các lớp PSD trong Python

Cách làm việc với các lớp PSD trong Python

Hướng dẫn này mô tả cách liệt kê các lớp của tài liệu, đọc và chỉnh sửa siêu dữ liệu có thể thay đổi của lớp, di chuyển vị trí lớp, và gỡ lớp ra khỏi tập hợp. Thuộc tính layers của PsdImage đã tải sẽ trả về tập hợp các đối tượng Layer. Mỗi Layer cung cấp siêu dữ liệu có thể chỉnh sửa — tên, trạng thái hiển thị, độ mờ, cắt, chế độ pha trộn, và vị trí (các cạnh giới hạn) — cùng với thông tin giới hạn tổng thể và kênh chỉ đọc.

Hướng dẫn chi tiết 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:$PYTHONPATH

Bước 2: Nhập các lớp cần thiết

PsdImage tải tài liệu; BlendMode sẽ được dùng sau này để đặt chế độ pha trộn cho một lớp:

from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.layers.blendmode import BlendMode

Bước 3: Tải tài liệu và liệt kê các lớp của nó

Tải tài liệu, sau đó lặp qua layers để xem tên và hình học của từng lớp:

image = PsdImage.load("input.psd")

for layer in image.layers:
    print(f"{layer.name}: {layer.width}x{layer.height} at ({layer.left},{layer.top})")

Bước 4: Đọc và chỉnh sửa khả năng hiển thị, độ mờ và chế độ pha trộn của lớp

is_visible, opacity (theo quy ước 0-255), clipping, name và blend_mode_key đều có các hàm cho phép đặt giá trị:

layer = image.layers[0]

layer.is_visible = False          # hide the layer
layer.opacity = 200               # ~78% opacity
layer.blend_mode_key = BlendMode.MULTIPLY
layer.name = "Renamed Layer"

Bước 5: Đọc và định vị lại giới hạn của lớp

bounds, width, height và channels_count chỉ có thể đọc — nhưng top, left, bottom và right mỗi cái đều có hàm đặt giá trị cho phép di chuyển lớp:

print(f"Bounds: {layer.bounds}")
print(f"Channels: {layer.channels_count}")

layer.left = 10
layer.top = 20
layer.right = 40
layer.bottom = 60

Bước 6: Thay thế bộ sưu tập các lớp

PsdImage.layers tự nó có một hàm đặt giá trị hoạt động, vì vậy bạn có thể thay thế toàn bộ bộ sưu tập (ví dụ, để loại bỏ một lớp):

image.layers = [l for l in image.layers if l.name != "Renamed Layer"]

Bước 7: Lưu tài liệu

Lưu lại mọi chỉnh sửa đã thực hiện trong các bước trước vào đĩa, sau đó giải phóng tài nguyên của hình ảnh:

image.save("output.psd")
image.dispose()

Các vấn đề thường gặp và cách khắc phục

NotSupportedException khi thiết lập channel_information, layer_mask_data, hoặc layer_blending_ranges_data. Ba cái này Layer các setter không được hỗ trợ trong bản FOSS này — coi chúng là chỉ đọc.

Giá trị opacity trông không đúng sau khi thiết lập nó. opacity thông thường là giá trị 0-255, không phải phân số 0.0-1.0 hay phần trăm — layer.opacity = 200 có nghĩa khoảng 78% mờ (200/255).

Các thay đổi trên layer không xuất hiện sau khi lưu. Xác nhận bạn đang chỉnh sửa Layer đối tượng nhận được từ image.layers, và rằng bạn gọi image.save() sau khi thực hiện các chỉnh sửa của bạn.

Câu hỏi thường gặp

Tôi có thể xóa một lớp khỏi tài liệu không?

Có — PsdImage.layers có một setter hoạt động, vì vậy bạn có thể gán cho nó một danh sách đã lọc để xóa các lớp (xem Bước 6).

Các chế độ hòa trộn nào có sẵn?

BlendMode bao gồm các giá trị như NORMAL, MULTIPLY, SCREEN, OVERLAY và DARKEN, trong số những thứ khác — được đặt qua Layer.blend_mode_key.

Dữ liệu mặt nạ lớp có sẵn không?

Layer.layer_mask_data có một getter hoạt động, nhưng setter của nó gây ra NotSupportedException trong bản dựng FOSS này.

Xem thêm

 Tiếng Việt