Signatur
Beschreibung
ps_open_memory_image() gehört zur ps-Erweiterung (PostScript) und ermöglicht es, ein mit der GD-Bibliothek erzeugtes oder geladenes Bild direkt in ein PostScript-Dokument einzubetten. Die Funktion liest die Bilddaten aus der GD-Ressource im Speicher aus und registriert das Bild intern im PS-Dokument.
Das Bild kann anschließend mit ps_place_image() an einer beliebigen Stelle im PostScript-Dokument positioniert werden. Die zurückgegebene Bild-ID wird dabei als Referenz verwendet. Wenn das Bild nicht mehr benötigt wird, sollte es mit ps_close_image() freigegeben werden, um Speicher zu sparen.
Typische Anwendungsfälle sind die dynamische Generierung von PostScript-Dokumenten mit eingebetteten Grafiken, z. B. Berichte mit Diagrammen oder Logos, die zunächst mit GD erzeugt und dann in PDF/PS exportiert werden.
Hinweis: Diese Funktion erfordert, dass sowohl die ps-Erweiterung als auch die GD-Erweiterung in PHP aktiviert sind. Die ps-Erweiterung ist nicht standardmäßig aktiviert und muss separat installiert werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $psdoc Pflicht | resource | Die Ressource des PostScript-Dokuments, die zuvor mit ps_new() und ps_open_file() erzeugt wurde. |
|
| $gd Pflicht | int | Die Ressource (oder in neueren PHP-Versionen das GdImage-Objekt) des GD-Bildes, das in das PS-Dokument eingebettet werden soll. Das Bild muss zuvor mit einer GD-Funktion wie imagecreatefrompng(), imagecreatefromjpeg() oder imagecreate() erzeugt worden sein. |
Rückgabewert
ps_place_image() und ps_close_image() verwendet werden kann. Im Fehlerfall wird 0 zurückgegeben.Beispiele
GD-Bild in PostScript-Dokument einbetten
<?php
// GD-Bild laden
$gdImage = imagecreatefrompng('logo.png');
// PostScript-Dokument erstellen
$ps = ps_new();
ps_open_file($ps, 'output.ps');
ps_set_info($ps, 'Creator', 'PHP ps_open_memory_image Beispiel');
ps_begin_page($ps, 595, 842); // DIN A4
// GD-Bild in PS-Dokument registrieren
$imageId = ps_open_memory_image($ps, $gdImage);
if ($imageId !== 0) {
// Bild auf der Seite platzieren (x=100, y=700, Breite=200, Höhe=100)
ps_place_image($ps, $imageId, 100, 700, 1.0);
// Bild-Ressource freigeben
ps_close_image($ps, $imageId);
} else {
echo 'Fehler beim Öffnen des Bildes.';
}
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
// GD-Ressource freigeben
imagedestroy($gdImage);
echo 'PostScript-Dokument wurde erstellt.';
?>
Dynamisch erzeugtes GD-Bild einbetten
<?php
// Dynamisches GD-Bild erzeugen
$gdImage = imagecreatetruecolor(300, 100);
$blau = imagecolorallocate($gdImage, 0, 0, 255);
$weiss = imagecolorallocate($gdImage, 255, 255, 255);
imagefilledrectangle($gdImage, 0, 0, 299, 99, $blau);
imagestring($gdImage, 5, 50, 35, 'Hallo PS!', $weiss);
// PostScript-Dokument erzeugen
$ps = ps_new();
ps_open_file($ps, 'dynamic.ps');
ps_begin_page($ps, 595, 842);
$imageId = ps_open_memory_image($ps, $gdImage);
if ($imageId !== 0) {
ps_place_image($ps, $imageId, 50, 600, 1.0);
ps_close_image($ps, $imageId);
}
ps_end_page($ps);
ps_close($ps);
ps_delete($ps);
imagedestroy($gdImage);
echo 'Dynamisches Bild in PS eingebettet.';
?>
// Wichtig · Fallstricke
Erweiterungsabhängigkeit: Die Funktion setzt voraus, dass die ps-Erweiterung (pecl/ps) sowie die GD-Erweiterung aktiviert sind. Ohne diese Erweiterungen steht die Funktion nicht zur Verfügung.
Ressourcen freigeben: Jedes mit ps_open_memory_image() geöffnete Bild sollte nach der Verwendung mit ps_close_image() geschlossen werden, um Speicher freizugeben. Die GD-Ressource sollte zusätzlich mit imagedestroy() freigegeben werden.
Farbmodus: Es empfiehlt sich, Truecolor-Bilder (imagecreatetruecolor()) zu verwenden, da palettenbasierte Bilder möglicherweise nicht korrekt eingebettet werden.