Signatur
Beschreibung
ps_curveto() gehört zur ps-Erweiterung (PostScript) für PHP und zeichnet eine kubische Bézier-Kurve. Die Kurve beginnt an der aktuellen Zeichenposition und endet am Punkt (x3, y3). Die Punkte (x1, y1) und (x2, y2) sind die zwei Kontrollpunkte, die die Form und Krümmung der Kurve bestimmen.
Kubische Bézier-Kurven sind besonders nützlich für das Zeichnen weicher, geschwungener Formen wie Logos, Schriftzeichen, technische Illustrationen oder dekorative Grafiken in PostScript-Dokumenten. Im Gegensatz zu einfachen geraden Linien erlauben Bézier-Kurven eine präzise Steuerung der Kurvenform durch die Kontrollpunkte.
Die Funktion fügt nur einen Pfadsegment zum aktuellen Pfad hinzu. Um die Kurve sichtbar zu machen, muss danach ps_stroke() (für eine Kontur) oder ps_fill() (zum Füllen) aufgerufen werden. Die aktuelle Position wird nach dem Aufruf auf (x3, y3) gesetzt.
- Koordinaten beziehen sich auf das PostScript-Koordinatensystem (Ursprung unten links, Einheit Punkt).
- Vor dem ersten Aufruf sollte mit
ps_moveto()eine Startposition gesetzt werden. - Mehrere
ps_curveto()-Aufrufe können verkettet werden, um komplexe Pfade aufzubauen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $psdoc Pflicht | resource | Das PostScript-Dokument-Handle, das von ps_new() zurückgegeben wurde. |
|
| $x1 Pflicht | float | X-Koordinate des ersten Kontrollpunkts der Bézier-Kurve. | |
| $y1 Pflicht | float | Y-Koordinate des ersten Kontrollpunkts der Bézier-Kurve. | |
| $x2 Pflicht | float | X-Koordinate des zweiten Kontrollpunkts der Bézier-Kurve. | |
| $y2 Pflicht | float | Y-Koordinate des zweiten Kontrollpunkts der Bézier-Kurve. | |
| $x3 Pflicht | float | X-Koordinate des Endpunkts der Bézier-Kurve. Nach dem Zeichnen wird die aktuelle Position auf diesen Wert gesetzt. | |
| $y3 Pflicht | float | Y-Koordinate des Endpunkts der Bézier-Kurve. Nach dem Zeichnen wird die aktuelle Position auf diesen Wert gesetzt. |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler, z. B. wenn das Dokument-Handle ungültig ist oder kein Dokument geöffnet wurde.Beispiele
Einfache Bézier-Kurve in ein PostScript-Dokument zeichnen
<?php
// PostScript-Dokument erstellen
$ps = ps_new();
if (!ps_open_file($ps, '/tmp/kurve.ps')) {
die('Datei konnte nicht geöffnet werden.');
}
ps_set_info($ps, 'Creator', 'PHP ps_curveto Beispiel');
ps_set_info($ps, 'Title', 'Bezier-Kurve');
// Neue Seite (A4: 595 x 842 Punkte)
ps_begin_page($ps, 595, 842);
// Strichfarbe: Schwarz
ps_setcolor($ps, 'stroke', 'rgb', 0.0, 0.0, 0.0, 0.0);
ps_setlinewidth($ps, 2.0);
// Startpunkt setzen
ps_moveto($ps, 100, 400);
// Bézier-Kurve zeichnen:
// Kontrollpunkt 1: (150, 600)
// Kontrollpunkt 2: (400, 200)
// Endpunkt: (500, 400)
ps_curveto($ps, 150, 600, 400, 200, 500, 400);
// Pfad als Konturlinie ausgeben
ps_stroke($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
echo 'PostScript-Datei mit Bézier-Kurve erstellt.';
?>
Zusammengesetzter Pfad aus mehreren Bézier-Kurven (S-Kurve)
<?php
$ps = ps_new();
if (!ps_open_file($ps, '/tmp/s-kurve.ps')) {
die('Datei konnte nicht geöffnet werden.');
}
ps_set_info($ps, 'Title', 'S-Kurve aus zwei Bezier-Segmenten');
ps_begin_page($ps, 595, 842);
// Strichfarbe: Dunkelblau
ps_setcolor($ps, 'stroke', 'rgb', 0.0, 0.0, 0.8, 0.0);
ps_setlinewidth($ps, 3.0);
// Startpunkt
ps_moveto($ps, 100, 300);
// Erstes Bézier-Segment (oberer Bogen der S-Kurve)
ps_curveto($ps, 100, 500, 300, 500, 300, 400);
// Zweites Bézier-Segment (unterer Bogen der S-Kurve)
ps_curveto($ps, 300, 300, 500, 300, 500, 500);
// Pfad zeichnen
ps_stroke($ps);
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
echo 'S-Kurve erfolgreich erstellt.';
?>
// Wichtig · Fallstricke
Erweiterung: ps_curveto() erfordert die ps-PECL-Erweiterung (pecl/ps), die nicht standardmäßig in PHP enthalten ist. Sie muss separat installiert werden. Seit PHP 8.x ist die Verfügbarkeit eingeschränkt — prüfe die PECL-Kompatibilität für deine PHP-Version.
Koordinatensystem: PostScript verwendet ein Koordinatensystem mit dem Ursprung unten links (im Gegensatz zu vielen anderen Grafiksystemen, bei denen der Ursprung oben links liegt). Koordinaten werden in typografischen Punkten (1 Punkt = 1/72 Zoll) angegeben.
Pfad-Status: ps_curveto() allein zeichnet nichts Sichtbares. Der aufgebaute Pfad muss anschließend mit ps_stroke(), ps_fill() oder ps_fill_stroke() gerendert werden. Ohne vorherigen Aufruf von ps_moveto() kann das Verhalten undefiniert sein.