Start · Sprachen · PHP · Referenz · ps_scale

ps_scale

Funktion

Setzt den Skalierungsfaktor für das aktuelle Koordinatensystem in einem PostScript-Dokument.

Kategorie: misc

Signatur

ps_scale(resource $psdoc, float $x, float $y): bool

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

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