Start · Sprachen · PHP · Referenz · ps_save

ps_save

Funktion

Speichert den aktuellen Grafikzustand (Kontext) eines PostScript-Dokuments auf den Zustandsstapel.

Kategorie: misc

Signatur

ps_save(resource $psdoc): bool

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

Typ
bool
Beschreibung
Gibt 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.';
?>
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.