Wprowadzenie

Aspose.PSD FOSS dla Python ładuje, inspekcjonuje i zapisuje dokumenty PSD i PSB przy użyciu niewielkiego zestawu klas. Ten wpis przygląda się częściom rdzenia API, które nie zostały szczegółowo omówione w poście wprowadzającym: jak Image i PsdImage odnoszą się do siebie, typom wartości geometrycznych używanym w całej bibliotece oraz temu, jak biblioteka zgłasza błędy ładowania i zapisu.


Co jest zawarte

Obraz i PsdImage

Image jest minimalną abstrakcyjną klasą bazową: definiuje tylko load(), który inspekcjonuje dane wejściowe i zwraca konkretną podklasę — dla danych wejściowych PSD/PSB tą podklasą jest PsdImage. Pełna powierzchnia dokumentu — color_mode, version, layers, compression, bits_per_channel, size i więcej — znajduje się w samym PsdImage, a nie w bazie Image.

from aspose_psd_foss.image import Image
from aspose_psd_foss.psdimage import PsdImage

with Image.load("input.psd") as image:
    assert isinstance(image, PsdImage)
    print(f"ColorMode: {image.color_mode}, Version: {image.version}")
    print(f"Size: {image.size}, Layers: {image.layer_count}")

Typy wartości geometrycznych

Point, Size, Rectangle i RectangleF są typami wartości używanymi do współrzędnych i wymiarów w całym API — Layer.bounds jest Rectangle, a PsdImage.size jest Size. Rectangle zawiera rzeczywiste metody geometryczne: contains(), intersect_rect(), union_rect(), inflate() i from_left_top_right_bottom(), między innymi.

from aspose_psd_foss.rectangle import Rectangle

layer_bounds = image.layers[0].bounds
fully_inside = layer_bounds.contains(Rectangle(0, 0, 10, 10))
overlap = Rectangle.intersect_rect(layer_bounds, Rectangle(0, 0, 100, 100))
print(f"Contains (0,0,10,10): {fully_inside}, overlap: {overlap}")

Bloki zasobów i wyjątki

PsdImage.image_resources zwraca sparsowaną listę obiektów ResourceBlock — każdy z nich udostępnia id, name, data_size oraz signature. W tej wersji FOSS, image_resources, global_layer_resources, active_layer i has_transparency_data można odczytywać, ale nie przypisywać — każdy ma setter, który podnosi NotSupportedException w razie wywołania, więc traktuj je jako tylko do odczytu, mimo że wyglądają jak zwykłe właściwości.

Błędy ładowania i zapisu pojawiają się jako dwa dedykowane typy wyjątków: PsdLoadException, gdy dokument nie może zostać sparsowany, oraz PsdSaveException, gdy dokument nie może zostać zapisany.

from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.coreexceptions.psdloadexception import PsdLoadException

try:
    with PsdImage.load("input.psd") as image:
        for resource in image.image_resources:
            print(f"Resource {resource.id}: {resource.name} ({resource.data_size} bytes)")
except PsdLoadException as ex:
    print(f"Failed to load input.psd: {ex}")

Szybki start

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
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.coreexceptions.psdloadexception import PsdLoadException

try:
    with PsdImage.load("input.psd") as image:
        print(f"Size: {image.size}, ColorMode: {image.color_mode}")
        print(f"ImageResources: {image.resource_count}")
except PsdLoadException as ex:
    print(f"Load failed: {ex}")

Obsługiwane formaty

FormatRozszerzenieOdczytZapis
PSDpsd✓✓
PSBpsb✓✓

Open Source i licencjonowanie

Aspose.PSD FOSS dla Python jest licencjonowany na licencji MIT i może być używany w produktach komercyjnych bez opłat licencyjnych, bez znaków wodnych oceny ani limitu użytkowania.

Biblioteka nie ma żadnych zależności natywnych stron trzecich — jedynie standardowa biblioteka Python jest wymagana w czasie wykonywania.


Rozpoczęcie

Powiązane zasoby