Introducere
Aspose.PSD FOSS pentru Python încarcă, inspectează și salvează documente PSD și PSB printr-un mic set de clase. Acest articol examinează părți din nucleul API pe care articolul introductiv nu le-a acoperit în profunzime: cum Image și PsdImage se relaționează între ele, tipurile de valori geometrice utilizate în întreaga bibliotecă și cum biblioteca raportează erorile de încărcare și salvare.
Ce este inclus
Imagine și PsdImage
Image este o clasă de bază abstractă minimală: definește doar load(), care inspectează intrarea și returnează o subclasă concretă — pentru intrarea PSD/PSB, acea subclasă este PsdImage. Suprafața completă a documentului — color_mode, version, layers, compression, bits_per_channel, size și altele — se află pe PsdImage însuși, nu pe baza 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}")
Tipuri de valori geometrice
Point, Size, Rectangle și RectangleF sunt tipurile de valori folosite pentru coordonate și dimensiuni în întregul API — Layer.bounds este un Rectangle, iar PsdImage.size este un Size. Rectangle conține metode reale de geometrie: contains(), intersect_rect(), union_rect(), inflate() și from_left_top_right_bottom(), printre altele.
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}")
Blocuri de resurse și excepții
PsdImage.image_resources returnează lista analizată de obiecte ResourceBlock — fiecare expune id, name, data_size și signature. În această construcție FOSS, image_resources, global_layer_resources, active_layer și has_transparency_data pot fi citite, dar nu pot fi reasignate — fiecare are un setter care ridică NotSupportedException dacă este apelat, așadar tratați-le ca fiind numai în citire, chiar dacă apar ca proprietăți obișnuite.
Erorile de încărcare și salvare apar ca două tipuri de excepții dedicate: PsdLoadException când un document nu poate fi analizat și PsdSaveException când un document nu poate fi scris înapoi.
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}")
Start rapid
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:$PYTHONPATHfrom 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}")
Formate suportate
| Format | Extensie | Citește | Scrie |
|---|---|---|---|
| PSD | psd | ✓ | ✓ |
| PSB | psb | ✓ | ✓ |
Open Source & Licențiere
Aspose.PSD FOSS pentru Python este licențiat sub MIT și poate fi utilizat în produse comerciale fără redevențe, fără filigran de evaluare sau limită de utilizare.
Biblioteca nu are nicio dependență nativă terță parte — doar biblioteca standard Python este necesară la rulare.