Signatur
Beschreibung
ps_scale() skaliert das aktuelle Koordinatensystem eines PostScript-Dokuments, das mit der ps_new()-Funktion erzeugt wurde. Durch Angabe der Faktoren für die X- und Y-Achse kann der Maßstab aller nachfolgenden Zeichenoperationen verändert werden.
Die Skalierung wirkt sich auf alle nach dem Aufruf gezeichneten Elemente aus – also auf Linien, Formen, Text und Bilder – bis das Koordinatensystem zurückgesetzt oder eine neue Transformation angewendet wird. Werte größer 1 vergrößern die Ausgabe, Werte zwischen 0 und 1 verkleinern sie. Negative Werte spiegeln zusätzlich die Achse.
Häufig wird ps_scale() zusammen mit ps_translate() und ps_rotate() eingesetzt, um komplexe Transformationen zu erzeugen. Es empfiehlt sich, den aktuellen Grafikzustand vor der Skalierung mit ps_save() zu sichern und nach der Zeichenoperation mit ps_restore() wiederherzustellen, damit nachfolgende Zeichenoperationen nicht ungewollt beeinflusst werden.
Diese Funktion gehört zur ps-Erweiterung (PostScript), die für die Erzeugung von PostScript-Dateien genutzt wird.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $psdoc Pflicht | resource | Die PostScript-Dokumentressource, die zuvor mit ps_new() erstellt und mit ps_open_file() geöffnet wurde. |
|
| $x Pflicht | float | Skalierungsfaktor für die horizontale X-Achse. Der Wert 1.0 entspricht keiner Skalierung, 2.0 verdoppelt die Breite, 0.5 halbiert sie. |
|
| $y Pflicht | float | Skalierungsfaktor für die vertikale Y-Achse. Der Wert 1.0 entspricht keiner Skalierung, 2.0 verdoppelt die Höhe, 0.5 halbiert sie. |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler (z. B. ungültige Ressource oder kein aktives Dokument).Beispiele
Einfache Skalierung eines Rechtecks
<?php
// Neues PostScript-Dokument erstellen
$ps = ps_new();
ps_open_file($ps, 'skalierung.ps');
ps_begin_page($ps, 595, 842);
// Grafikzustand speichern
ps_save($ps);
// Koordinatensystem auf das Doppelte skalieren
ps_scale($ps, 2.0, 2.0);
// Rechteck zeichnen (erscheint doppelt so groß wie ohne Skalierung)
ps_setcolor($ps, 'stroke', 'rgb', 0.0, 0.0, 1.0, 0.0);
ps_rect($ps, 50, 50, 100, 80);
ps_stroke($ps);
// Grafikzustand wiederherstellen
ps_restore($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
echo 'PostScript-Datei mit skalierten Elementen erstellt.';
?>
Unterschiedliche X- und Y-Skalierung kombiniert mit Verschiebung
<?php
$ps = ps_new();
ps_open_file($ps, 'transform.ps');
ps_begin_page($ps, 595, 842);
// Zustand sichern
ps_save($ps);
// Ursprung verschieben, dann asymmetrisch skalieren
ps_translate($ps, 100, 400);
ps_scale($ps, 3.0, 1.5); // X dreifach, Y eineinhalbfach
// Kreis zeichnen (wird zur Ellipse durch asymmetrische Skalierung)
ps_setcolor($ps, 'fill', 'rgb', 0.8, 0.2, 0.2, 0.0);
ps_arc($ps, 0, 0, 50, 0, 360);
ps_fill($ps);
// Zustand wiederherstellen
ps_restore($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
echo 'Transformiertes Dokument gespeichert.';
?>
// Wichtig · Fallstricke
Grafikzustand sichern: Da ps_scale() das globale Koordinatensystem des aktuellen Grafikzustands verändert, sollte man vor dem Aufruf stets ps_save() verwenden und danach ps_restore(), um unbeabsichtigte Auswirkungen auf nachfolgende Zeichenoperationen zu vermeiden.
Kumulative Transformationen: Mehrere aufeinanderfolgende Aufrufe von ps_scale() multiplizieren die Faktoren. Ein zweimaliger Aufruf mit Faktor 2.0 ergibt eine Gesamtskalierung von 4.0.
Erweiterung: Die ps-Erweiterung ist nicht standardmäßig in PHP enthalten und muss separat kompiliert oder installiert werden (PECL-Paket ps). Sie ist außerdem nicht in allen Hosting-Umgebungen verfügbar.