Signatur
Beschreibung
ps_open_image ist Teil der PHP-PostScript-Erweiterung (ps) und ermöglicht es, Bilddaten direkt aus einem String in ein PostScript-Dokument einzulesen. Das Bild wird nicht sofort gerendert, sondern zunächst intern registriert und erhält eine numerische ID, über die es später beliebig oft mit ps_place_image positioniert werden kann.
Im Gegensatz zu ps_open_image_file, das eine Datei als Quelle erwartet, übergibt man bei ps_open_image die rohen Bilddaten als String. Das ist besonders nützlich, wenn die Bilddaten bereits im Speicher vorliegen – zum Beispiel nach einem Datenbankaufruf oder einer HTTP-Antwort – und kein temporäres Schreiben auf die Festplatte erwünscht ist.
Unterstützte Bildtypen sind typischerweise png, jpeg und eps. Die Parameter width, height, components und bpc müssen exakt mit den tatsächlichen Bildattributen übereinstimmen; fehlerhafte Angaben führen zu korrumpierter PostScript-Ausgabe.
Nach der Verwendung sollte das Bild mit ps_close_image wieder freigegeben werden, um Speicher zu entleeren.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $psdoc Pflicht | resource | Die PostScript-Dokumentressource, wie sie von ps_new zurückgegeben wird. |
|
| $type Pflicht | string | Der Bildtyp als Zeichenkette, z. B. 'png', 'jpeg' oder 'eps'. |
|
| $source Pflicht | string | Quelle der Bilddaten. Üblicherweise 'memory' für im Speicher vorliegende Daten. |
|
| $data Pflicht | string | Die rohen Binärdaten des Bildes als PHP-String. | |
| $length Pflicht | float | Die Länge der Bilddaten in Bytes. Sollte mit strlen($data) übereinstimmen. |
|
| $width Pflicht | int | Die Breite des Bildes in Pixeln. | |
| $height Pflicht | int | Die Höhe des Bildes in Pixeln. | |
| $components Pflicht | int | Anzahl der Farbkomponenten: 1 für Graustufen, 3 für RGB, 4 für CMYK. |
|
| $bpc Pflicht | int | Bits pro Farbkanal, typischerweise 8. |
|
| $params Pflicht | string | Zusätzliche Parameter als Zeichenkette. Kann leer sein, wenn keine weiteren Optionen benötigt werden. |
Rückgabewert
ps_place_image referenziert werden kann. Im Fehlerfall wird 0 zurückgegeben.Beispiele
JPEG aus Datei in PostScript einbetten
<?php
$ps = ps_new();
ps_open_file($ps, '/tmp/ausgabe.ps');
ps_begin_page($ps, 595, 842);
// JPEG-Daten aus Datei lesen
$bildDaten = file_get_contents('/pfad/zum/bild.jpg');
$bildInfo = getimagesize('/pfad/zum/bild.jpg');
$bildId = ps_open_image(
$ps,
'jpeg',
'memory',
$bildDaten,
strlen($bildDaten),
$bildInfo[0], // Breite
$bildInfo[1], // Höhe
3, // RGB
8, // Bits pro Kanal
''
);
if ($bildId > 0) {
// Bild bei Position (50, 700) mit 200x150 Punkt platzieren
ps_place_image($ps, $bildId, 50, 700, 1.0);
ps_close_image($ps, $bildId);
} else {
echo 'Fehler beim Einlesen des Bildes.';
}
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
?>
Bild mehrfach auf einer Seite platzieren
<?php
$ps = ps_new();
ps_open_file($ps, '/tmp/mehrfach.ps');
ps_begin_page($ps, 595, 842);
$bildDaten = file_get_contents('/pfad/zum/logo.jpg');
[$breite, $hoehe] = getimagesize('/pfad/zum/logo.jpg');
$bildId = ps_open_image(
$ps, 'jpeg', 'memory',
$bildDaten, strlen($bildDaten),
$breite, $hoehe, 3, 8, ''
);
if ($bildId > 0) {
// Dasselbe Bild an drei verschiedenen Positionen
ps_place_image($ps, $bildId, 50, 750, 0.5);
ps_place_image($ps, $bildId, 200, 600, 0.5);
ps_place_image($ps, $bildId, 350, 450, 0.5);
ps_close_image($ps, $bildId);
}
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
?>
// Wichtig · Fallstricke
Achtung: Die Parameter width, height, components und bpc werden nicht automatisch aus den Bilddaten ermittelt – sie müssen manuell korrekt angegeben werden. Falsche Werte führen zu einem defekten PostScript-Dokument ohne Fehlermeldung.
Die ps-Erweiterung ist nicht standardmäßig in PHP enthalten und muss über PECL installiert werden (pecl install ps). Sie setzt die C-Bibliothek pslib voraus.
Für einfachere Fälle, bei denen das Bild als Datei vorliegt, ist ps_open_image_file bequemer, da die Bildmetadaten automatisch aus der Datei gelesen werden können.