Wie man PSD-Dokumente in Python speichert und exportiert
Diese Anleitung zeigt, wie man ein bearbeitetes Dokument an einem Dateipfad speichert, in einen offenen Stream schreibt und anschließend ein geladenes Bild freigibt. PsdImage.save ist der einzige öffentliche Einstiegspunkt, um ein Dokument wieder auszugeben—er akzeptiert entweder einen Dateipfad oder einen bereits geöffneten beschreibbaren Stream. Der Low-Level Section Writer, der die eigentliche Byte-Kodierung vornimmt, ist ein internes Implementierungsdetail und kein Aufruf, den Sie direkt verwenden.
Schritt-für-Schritt-Anleitung
Schritt 1: Paket installieren
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:$PYTHONPATHSchritt 2: Erforderliche Klassen importieren
PsdImage ist die einzige Klasse, die die Beispiele dieser Anleitung benötigen:
from aspose_psd_foss.psdimage import PsdImageSchritt 3: In einen Dateipfad speichern
Lade ein Dokument, nimm eine Bearbeitung vor und speichere es anschließend wieder in einen Dateipfad:
image = PsdImage.load("input.psd")
image.layers[0].is_visible = False
image.save("output.psd")Schritt 4: In einen offenen Stream speichern
Das Übergeben eines Streams anstelle eines Pfads lässt den Stream nach dem Speichern offen — du entscheidest, wann er geschlossen wird:
with open("output.psd", "wb") as stream:
image.save(stream)Schritt 5: Bild freigeben
Gib die Ressourcen frei, die das geladene PsdImage hält, sobald du damit fertig bist:
image.dispose()Häufige Probleme und Lösungen
RuntimeError: PsdImage has been disposed. bei Aufruf save. Das Bild wurde bereits freigegeben (via dispose() oder ein with Block, der beendet wurde) bevor save aufgerufen wurde. Rufen Sie save vor dem Freigeben.
PsdSaveException zur Pascal-String-Länge. Ein Zeichenkettenwert überschreitet 255Bytes— siehe Umgang mit PSD Core-Ausnahmen and Troubleshooting.
Keine Möglichkeit, beim Speichern einen PSD- oder PSB-Container zu erzwingen. Es gibt keinen öffentlichen API, um das Ausgabe-Container-Format zu wählen — ein Speichern spiegelt immer das Format (is_large_document / is_psb) das Dokument geladen wurde. Wenn Sie ein anderes Container-Format benötigen, gibt es keinen unterstützten Konvertierungspfad in diesem FOSS-Build.
Häufig gestellte Fragen
Schließt das Speichern in einen Stream den Stream anschließend?
Nein — wenn Sie einen Stream an save übergeben, bleibt der Stream anschließend offen, sodass Sie seinen Lebenszyklus steuern können (siehe Schritt4). Beim Speichern in einen Dateipfad hingegen wird die Datei intern geöffnet und geschlossen.
Kann ich den internen Abschnitt-Writer direkt aufrufen anstelle von save?
Nein — der Writer auf Abschnittsebene ist ein internes Implementierungsdetail, das von PsdImage.save aufgerufen wird. Es gibt keinen dokumentierten, unterstützten Weg, ein Dokument zu schreiben, ohne save auf einer PsdImage-Instanz aufzurufen.