Вступ
Aspose.PSD FOSS для Python завантажує, інспектує та зберігає PSD і PSB документи за допомогою невеликого набору класів. Цей пост розглядає частини ядра API, які вступний пост не охопив детально: як Image і PsdImage взаємодіють один з одним, типи значень геометрії, що використовуються в бібліотеці, та те, як бібліотека повідомляє про помилки завантаження та збереження.
Що включено
Зображення та PsdImage
Image — це мінімальний абстрактний базовий клас: він визначає лише load(), який інспектує вхідні дані та повертає конкретний підклас — для PSD/PSB вхідних даних цей підклас є PsdImage. Повна поверхня документа — color_mode, version, layers, compression, bits_per_channel, size та інше — знаходиться в самому PsdImage, а не в базі 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}")
Типи значень геометрії
Point, Size, Rectangle та RectangleF — це типи значень, що використовуються для координат і розмірів у всьому API — Layer.bounds є Rectangle, а PsdImage.size є Size. Rectangle містить реальні методи геометрії: contains(), intersect_rect(), union_rect(), inflate() та from_left_top_right_bottom(), серед інших.
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}")
Блоки ресурсів та виключення
PsdImage.image_resources повертає розпарсений список об’єктів ResourceBlock — кожен з них надає id, name, data_size і signature. У цій FOSS збірці image_resources, global_layer_resources, active_layer і has_transparency_data можна лише читати, а не перепризначати — у кожного є сеттер, який піднімає NotSupportedException, якщо його викликати, тому розглядайте їх як лише для читання, хоча вони виглядають як звичайні властивості.
Помилки завантаження та збереження проявляються у вигляді двох спеціалізованих типів виключень: PsdLoadException, коли документ не вдається розпарсити, і PsdSaveException, коли документ не вдається записати назад.
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}")
Швидкий старт
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}")
Підтримувані формати
| Формат | Розширення | Читати | Записувати |
|---|---|---|---|
| PSD | psd | ✓ | ✓ |
| PSB | psb | ✓ | ✓ |
Відкритий код та ліцензування
Aspose.PSD FOSS для Python має ліцензію MIT і може використовуватись у комерційних продуктах без роялті, без водяного знака оцінки чи обмеження використання.
Бібліотека не має жодних сторонніх нативних залежностей — лише стандартна бібліотека Python потрібна під час виконання.