Signatur
Beschreibung
imagecreatefrompng() liest eine PNG-Bilddatei vom Dateisystem oder von einer URL (sofern URL-Wrapper aktiviert sind) und gibt eine GdImage-Instanz zurück. Diese kann anschließend mit allen GD-Zeichenfunktionen bearbeitet und mit imagepng(), imagejpeg() oder anderen Ausgabefunktionen gespeichert bzw. ausgegeben werden.
Die Funktion ist besonders nützlich, wenn bestehende PNG-Grafiken als Ausgangsbasis für Wasserzeichen, Bildtransformationen, Kompositionen oder dynamische Bildgenerierung dienen sollen. Anders als imagecreatefromstring() liest sie direkt aus einer Datei, ohne dass der Dateiinhalt zuvor in einen String geladen werden muss.
PNG unterstützt Transparenz (Alpha-Kanal). Um den Alpha-Kanal nach dem Laden korrekt zu erhalten, sollte imagealphablending() und imagesavealpha() auf dem zurückgegebenen Bild gesetzt werden, bevor es verändert oder gespeichert wird.
Seit PHP 8.0 gibt die Funktion ein GdImage-Objekt zurück (zuvor eine Ressource vom Typ gd). Im Fehlerfall – z. B. wenn die Datei nicht existiert oder kein gültiges PNG ist – wird false zurückgegeben.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $filename Pflicht | string | Pfad zur PNG-Datei im Dateisystem oder eine URL (z. B. https://example.com/bild.png), sofern allow_url_fopen in der php.ini aktiviert ist. |
Rückgabewert
GdImage-Objekt zurück. Bei einem Fehler (Datei nicht gefunden, ungültiges PNG-Format, fehlende GD-Unterstützung) wird false zurückgegeben. Es empfiehlt sich, den Rückgabewert stets mit === false zu prüfen.Beispiele
PNG laden, Text hinzufügen und als PNG ausgeben
<?php
// PNG-Bild laden
$bild = imagecreatefrompng('/pfad/zum/bild.png');
if ($bild === false) {
die('Fehler: PNG-Datei konnte nicht geladen werden.');
}
// Transparenz erhalten
imagealphablending($bild, true);
imagesavealpha($bild, true);
// Farbe für Text definieren
$textfarbe = imagecolorallocate($bild, 255, 0, 0);
// Text auf das Bild schreiben
imagestring($bild, 5, 10, 10, 'Hallo, PHP-GD!', $textfarbe);
// Als PNG an Browser ausgeben
header('Content-Type: image/png');
imagepng($bild);
imagedestroy($bild);
Wasserzeichen-Overlay: PNG-Logo auf ein anderes PNG kopieren
<?php
// Hintergrundbild laden
$hintergrund = imagecreatefrompng('/pfad/zum/foto.png');
if ($hintergrund === false) {
die('Hintergrundbild konnte nicht geladen werden.');
}
// Logo (mit Transparenz) laden
$logo = imagecreatefrompng('/pfad/zum/logo.png');
if ($logo === false) {
die('Logo konnte nicht geladen werden.');
}
// Alpha-Blending für korrektes Compositing
imagealphablending($hintergrund, true);
imagealphablending($logo, false);
imagesavealpha($logo, true);
// Logo unten rechts positionieren (10 px Abstand)
$randAbstand = 10;
$logoX = imagesx($hintergrund) - imagesx($logo) - $randAbstand;
$logoY = imagesy($hintergrund) - imagesy($logo) - $randAbstand;
// Logo auf Hintergrund kopieren (mit Alpha)
imagecopy(
$hintergrund,
$logo,
$logoX, $logoY,
0, 0,
imagesx($logo),
imagesy($logo)
);
// Ergebnis als Datei speichern
imagepng($hintergrund, '/pfad/zum/ergebnis.png');
imagedestroy($hintergrund);
imagedestroy($logo);
echo 'Wasserzeichen erfolgreich eingefügt.';
// Wichtig · Fallstricke
Transparenz: PNG-Bilder können einen Alpha-Kanal besitzen. Damit dieser nach dem Laden erhalten bleibt, sollte unmittelbar nach imagecreatefrompng() imagealphablending($bild, false) und imagesavealpha($bild, true) aufgerufen werden — andernfalls kann es zu unerwünschten Farbvermischungen kommen.
Externe URLs: Das Laden von Dateien via HTTP/HTTPS ist nur möglich, wenn allow_url_fopen = On in der php.ini gesetzt ist. Aus Sicherheitsgründen sollten externe URLs grundsätzlich validiert werden, bevor sie übergeben werden.
Speicher: Große PNG-Dateien können erheblich Arbeitsspeicher benötigen, da sie unkomprimiert als Pixelmatrix im Speicher gehalten werden. Nach der Verwendung sollte imagedestroy() aufgerufen werden (in PHP < 8.0 zwingend, ab 8.0 kümmert sich der Garbage Collector um das GdImage-Objekt).
Fehlerbehandlung: Bei nicht vorhandener oder beschädigter Datei gibt die Funktion false zurück und erzeugt eine PHP-Warnung. Mit @imagecreatefrompng() kann die Warnung unterdrückt werden, allerdings sollte der Rückgabewert stets explizit geprüft werden.