Signatur
Beschreibung
ps_save() speichert den aktuellen Grafikzustand des PostScript-Dokuments auf einem internen Stapel (Stack). Der gespeicherte Zustand umfasst alle aktuellen Grafikparameter wie Farbe, Linienbreite, Transformationsmatrix, Schriftart und Clipping-Bereich. Diese Funktion entspricht dem PostScript-Operator gsave.
Der typische Anwendungsfall ist das temporäre Verändern von Grafikparametern (z. B. Farbe, Linienstärke oder Transformation), ohne den übergeordneten Zeichenzustand dauerhaft zu beeinflussen. Nach dem Zeichnen können mit ps_restore() alle Änderungen rückgängig gemacht und der ursprüngliche Zustand wiederhergestellt werden.
ps_save() und ps_restore() sollten immer paarweise verwendet werden. Mehrfache Aufrufe von ps_save() ohne entsprechendes ps_restore() können zu Problemen beim Rendern des PostScript-Dokuments führen, da PostScript selbst einen begrenzten Tiefenspeicher für den Zustandsstapel besitzt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $psdoc Pflicht | resource | Die Ressource des PostScript-Dokuments, wie sie von ps_new() zurückgegeben wurde. |
Rückgabewert
true bei Erfolg zurück, false im Fehlerfall.Beispiele
Temporäres Ändern der Linienfarbe mit ps_save/ps_restore
<?php
$ps = ps_new();
ps_open_file($ps, 'ausgabe.ps');
ps_begin_page($ps, 595, 842);
// Standardfarbe: schwarz
ps_setcolor($ps, 'stroke', 'rgb', 0, 0, 0, 0);
ps_moveto($ps, 100, 700);
ps_lineto($ps, 300, 700);
ps_stroke($ps);
// Zustand speichern, dann temporär auf Rot wechseln
ps_save($ps);
ps_setcolor($ps, 'stroke', 'rgb', 1, 0, 0, 0);
ps_setlinewidth($ps, 3);
ps_moveto($ps, 100, 650);
ps_lineto($ps, 300, 650);
ps_stroke($ps);
// Ursprünglichen Zustand (schwarz, standard Linienbreite) wiederherstellen
ps_restore($ps);
ps_moveto($ps, 100, 600);
ps_lineto($ps, 300, 600);
ps_stroke($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
echo 'PostScript-Datei erfolgreich erstellt.';
?>
Verschachtelte Zustände mit ps_save und ps_restore
<?php
$ps = ps_new();
ps_open_file($ps, 'verschachtelt.ps');
ps_begin_page($ps, 595, 842);
// Äußerer Zustand
ps_setcolor($ps, 'fill', 'rgb', 0, 0, 1, 0); // blau
ps_save($ps); // Ersten Zustand speichern
ps_setcolor($ps, 'fill', 'rgb', 0, 1, 0, 0); // grün
ps_save($ps); // Zweiten Zustand speichern
ps_setcolor($ps, 'fill', 'rgb', 1, 0, 0, 0); // rot
ps_arc($ps, 200, 600, 40, 0, 360);
ps_fill($ps); // füllt rot
ps_restore($ps); // zurück zu grün
ps_arc($ps, 350, 600, 40, 0, 360);
ps_fill($ps); // füllt grün
ps_restore($ps); // zurück zu blau
ps_arc($ps, 200, 500, 40, 0, 360);
ps_fill($ps); // füllt blau
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
?>
// Wichtig · Fallstricke
Paarweise Verwendung: Jeder Aufruf von ps_save() muss mit genau einem korrespondierenden ps_restore() beendet werden. Fehlende ps_restore()-Aufrufe können dazu führen, dass das erzeugte PostScript-Dokument nicht korrekt gerendert wird oder zu Fehlern im PostScript-Interpreter führt.
Erweiterung: Diese Funktion gehört zur PECL-Erweiterung ps (pslib). Sie muss explizit installiert und aktiviert sein, da sie nicht zum PHP-Kern gehört.