Start · Sprachen · PHP · Referenz · imagepng

imagepng

Funktion

Gibt ein GD-Bildobjekt als PNG-Datei aus oder speichert es direkt im Browser bzw. in einer Datei.

seit PHP 4.0.0 Kategorie: image

Signatur

imagepng(GdImage $image, string|null $file = null, int $quality = -1, int $filters = -1): bool

Beschreibung

imagepng() wandelt ein GD-Bildobjekt in das verlustfreie PNG-Format um und schreibt das Ergebnis entweder direkt in den Output-Buffer (Browser) oder in eine Datei auf dem Server. PNG unterstützt Transparenz (Alpha-Kanal) und ist daher ideal für Grafiken, Logos und alle Bilder, bei denen Bildqualität ohne Kompromisse wichtig ist.

Der Parameter quality steuert die Komprimierungsstärke auf einer Skala von 0 (keine Komprimierung, größte Datei) bis 9 (maximale Komprimierung, kleinste Datei). Der Standardwert -1 übernimmt die zlib-Standardeinstellung. Anders als bei JPEG ist PNG verlustfrei – die Qualität des Bildinhalts bleibt unabhängig vom Komprimierungsgrad erhalten.

Mit dem Parameter filters können PNG-Filteralgorithmen aktiviert werden, die die Komprimierbarkeit bestimmter Bildtypen verbessern. Die Filterkonstanten (PNG_FILTER_NONE, PNG_FILTER_SUB, PNG_FILTER_UP, PNG_FILTER_AVG, PNG_FILTER_PAETH, PNG_ALL_FILTERS) können per bitweisem ODER kombiniert werden.

Soll die PNG-Ausgabe direkt an den Browser gesendet werden, muss vorher mit header('Content-Type: image/png') der korrekte MIME-Typ gesetzt werden. Es darf kein HTML oder Whitespace vor dem header()-Aufruf ausgegeben werden.

Parameter

Name Typ Default Beschreibung
$image Pflicht GdImage Das GD-Bildobjekt, z. B. erzeugt durch imagecreate(), imagecreatetruecolor() oder imagecreatefromjpeg().
$file string|null null Pfad zur Zieldatei auf dem Server. Wird null übergeben oder der Parameter weggelassen, wird die PNG-Ausgabe direkt in den Output-Buffer (Browser) geschrieben.
$quality int -1 Komprimierungsgrad von 0 (keine Komprimierung) bis 9 (maximale Komprimierung). -1 verwendet den zlib-Standard. Beeinflusst nur die Dateigröße, nicht die Bildqualität.
$filters int -1 Bitmaske der anzuwendenden PNG-Filteralgorithmen, z. B. PNG_ALL_FILTERS. -1 aktiviert keine expliziten Filter. Kann die Komprimierungseffizienz bei bestimmten Bildtypen verbessern.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler (z. B. wenn die Zieldatei nicht geschrieben werden kann).

Beispiele

PNG direkt an den Browser ausgeben

<?php
// Bild erzeugen
$image = imagecreatetruecolor(200, 100);

// Hintergrundfarbe setzen
$bg = imagecolorallocate($image, 30, 144, 255);
imagefill($image, 0, 0, $bg);

// Text hinzufügen
$textColor = imagecolorallocate($image, 255, 255, 255);
imagestring($image, 5, 40, 40, 'Hallo PNG!', $textColor);

// Korrekten Content-Type senden
header('Content-Type: image/png');

// PNG an Browser ausgeben
imagepng($image);

// Speicher freigeben
imagedestroy($image);
(PNG-Binärdaten werden direkt an den Browser gesendet)

PNG mit Transparenz in Datei speichern

<?php
// Transparentes True-Color-Bild erzeugen
$image = imagecreatetruecolor(150, 150);

// Transparenz aktivieren
imagealphablending($image, false);
imagesavealpha($image, true);

// Transparenten Hintergrund füllen
$transparent = imagecolorallocatealpha($image, 0, 0, 0, 127);
imagefill($image, 0, 0, $transparent);

// Gefüllten Kreis zeichnen
$red = imagecolorallocate($image, 220, 50, 50);
imagefilledellipse($image, 75, 75, 120, 120, $red);

// Als PNG-Datei speichern (Qualität 6, keine Sonderfilter)
$result = imagepng($image, '/var/www/html/kreis.png', 6);

if ($result) {
    echo 'Bild erfolgreich gespeichert.';
} else {
    echo 'Fehler beim Speichern.';
}

imagedestroy($image);
Bild erfolgreich gespeichert.

// Wichtig · Fallstricke

Header-Reihenfolge: Bei der Browser-Ausgabe muss header('Content-Type: image/png') aufgerufen werden, bevor irgendeine Ausgabe (auch Leerzeichen oder BOM) erfolgt, sonst schlägt der Header fehl.

Transparenz: Damit der Alpha-Kanal korrekt gespeichert wird, müssen vor imagepng() unbedingt imagealphablending($image, false) und imagesavealpha($image, true) aufgerufen werden. Andernfalls geht die Transparenzinformation verloren.

Output-Buffering: Um die PNG-Ausgabe in eine Variable statt in eine Datei zu schreiben, kann ob_start() / ob_get_clean() verwendet werden oder alternativ ein beschreibbarer Stream-Wrapper wie php://temp.

GD-Erweiterung: imagepng() setzt die GD-Erweiterung mit PNG-Unterstützung voraus. Ob PNG unterstützt wird, lässt sich mit gd_info() prüfen.