Start · Sprachen · PHP · Referenz · ps_curveto

ps_curveto

Funktion

Zeichnet eine kubische Bézier-Kurve im PostScript-Dokument von der aktuellen Position zu einem Zielpunkt unter Verwendung von zwei Kontrollpunkten.

seit PHP 4.3.2 Kategorie: misc

Signatur

ps_curveto(resource $psdoc, float $x1, float $y1, float $x2, float $y2, float $x3, float $y3): bool

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

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