Signatur
Beschreibung
ps_translate gehört zur PS-Erweiterung (pslib) für PHP und ermöglicht es, den Koordinatenursprung des aktuellen PostScript-Grafikzustands zu verschieben. Dies entspricht der PostScript-Anweisung translate und verändert das aktuelle Transformationsmatrix (CTM).
Die Funktion ist besonders nützlich, wenn Grafikelemente relativ zu einem bestimmten Punkt positioniert werden sollen, ohne absolute Koordinaten verwenden zu müssen. So lässt sich beispielsweise ein ganzer Zeichenblock an eine neue Position verschieben, indem einmalig der Ursprung gesetzt wird.
Wie alle Transformationsfunktionen der PS-Erweiterung wirkt ps_translate kumulativ und beeinflusst alle nachfolgenden Zeichenoperationen. Es empfiehlt sich daher, den Grafikzustand vor der Translation mit ps_save zu sichern und nach Abschluss der Zeichenoperationen mit ps_restore wiederherzustellen.
Die Einheiten für x und y entsprechen PostScript-Punkten (1/72 Zoll). Das Koordinatensystem von PostScript hat seinen Ursprung standardmäßig unten links, mit der y-Achse nach oben.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $psdoc Pflicht | resource | Die Ressource des PostScript-Dokuments, die zuvor mit ps_new() erstellt wurde. |
|
| $x Pflicht | float | Der Versatz in horizontaler Richtung (x-Achse) in PostScript-Punkten. | |
| $y Pflicht | float | Der Versatz in vertikaler Richtung (y-Achse) in PostScript-Punkten. Positive Werte verschieben nach oben (PostScript-Koordinatensystem). |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler.Beispiele
Einfache Translation des Koordinatenursprungs
<?php
$ps = ps_new();
if (!$ps) {
die('Fehler beim Erstellen des PS-Dokuments');
}
ps_open_file($ps, 'ausgabe.ps');
ps_begin_page($ps, 595, 842); // DIN A4
// Ursprung in die Mitte der Seite verschieben
ps_translate($ps, 297.5, 421);
// Jetzt zeichnen wir relativ zur Seitenmitte
// Ein kleines Rechteck rund um den neuen Ursprung
ps_moveto($ps, -50, -50);
ps_lineto($ps, 50, -50);
ps_lineto($ps, 50, 50);
ps_lineto($ps, -50, 50);
ps_closepath($ps);
ps_stroke($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
echo 'PostScript-Datei erfolgreich erstellt.';
?>
Translation mit gesichertem Grafikzustand
<?php
$ps = ps_new();
ps_open_file($ps, 'mehrere_elemente.ps');
ps_begin_page($ps, 595, 842);
// Grafik-Element 1: oben links
ps_save($ps);
ps_translate($ps, 100, 700);
ps_moveto($ps, 0, 0);
ps_lineto($ps, 80, 0);
ps_lineto($ps, 80, 80);
ps_lineto($ps, 0, 80);
ps_closepath($ps);
ps_fill($ps);
ps_restore($ps);
// Grafik-Element 2: unten rechts (Ursprung wieder zurückgesetzt)
ps_save($ps);
ps_translate($ps, 400, 150);
ps_moveto($ps, 0, 0);
ps_lineto($ps, 80, 0);
ps_lineto($ps, 80, 80);
ps_lineto($ps, 0, 80);
ps_closepath($ps);
ps_stroke($ps);
ps_restore($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
echo 'Zwei Elemente gezeichnet.';
?>
// Wichtig · Fallstricke
Kumulative Wirkung: Mehrfache Aufrufe von ps_translate addieren sich. Wird die Funktion ohne vorheriges ps_save mehrfach aufgerufen, verschiebt sich der Ursprung mit jedem Aufruf weiter. Verwende immer ps_save und ps_restore, um unbeabsichtigte Transformationen zu vermeiden.
Koordinatensystem: PostScript verwendet ein kartesisches Koordinatensystem mit dem Ursprung unten links. Dies unterscheidet sich von vielen anderen Grafiksystemen (z. B. Bildschirmkoordinaten), bei denen der Ursprung oben links liegt. Positive y-Werte zeigen nach oben.
Verfügbarkeit: Die PS-Erweiterung ist nicht standardmäßig in PHP enthalten. Sie muss über PECL installiert oder bei der PHP-Kompilierung mit --with-ps aktiviert werden.