Hoe een PSD-document te laden in Python
PsdImage.load is het enige publieke toegangspunt voor het openen van een PSD/PSB-document — het accepteert zowel een bestandspad als een reeds geopende leesbare stream. De low-level section-by-section lezer waar het intern naar delegeert, is niets wat je direct aanroept.
Stap-voor-stap gids
Stap 1: Installeer het pakket
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:$PYTHONPATHStap 2: Importeer vereiste klassen
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.coreexceptions.psdloadexception import PsdLoadExceptionStap 3: Laad vanaf een bestandspad
image = PsdImage.load("input.psd")
print(f"Loaded: {image.width}x{image.height}")
image.dispose()Stap 4: Laden vanaf een stream
Een stream hoeft niet seekbaar te zijn — load leest de volledige inhoud in een interne buffer voordat het wordt geparseerd:
with open("input.psd", "rb") as stream:
image = PsdImage.load(stream)
print(f"Loaded from stream: {image.width}x{image.height}")
image.dispose()Veelvoorkomende problemen en oplossingen
FileNotFoundError: File not found: .... Het pad dat is doorgegeven aan load wijst niet naar een bestaand bestand — load checks os.path.isfile voordat geprobeerd wordt het te openen.
PsdLoadException: Unexpected end of PSD/PSB data while reading the file structure. De bronstream raakte halverwege het ontleden zonder gegevens (een EOFError tijdens het lezen) — het bestand is waarschijnlijk afgekapt.
PsdLoadException: Failed to read PSD/PSB data from the source stream. Er trad een I/O-fout op tijdens het lezen van de stream zelf, verpakt en opnieuw opgegooid als een PsdLoadException.
ArgumentNullException bij het aanroepen van load. load werd aangeroepen met None als het stream-argument.
Veelgestelde vragen
Moet ik een stream terug naar het begin zoeken voordat ik load aanroep?
Nee — als de stream seekbaar is, herstelt load zijn oorspronkelijke positie na het lezen; als hij niet seekbaar is, werkt load nog steeds omdat hij de inhoud van de stream intern buffer voordat er wordt geparseerd.
Wat is het verschil tussen de twee FileNotFoundError/PsdLoadException fouten hierboven?
Een ontbrekend bestandspad veroorzaakt de standaard FileNotFoundError voordat er met parseren wordt begonnen. Een PsdLoadException in plaats daarvan betekent dit dat een bestand (of stream) werd gevonden en geopend, maar dat de PSD/PSB-gegevens zelf zijn afgekapt, corrupt of anderszins onleesbaar zodra het parseren begon — zie ook Troubleshooting voor de versie- en grensgerelateerde PsdLoadException varianten.