Signatur
Beschreibung
imagecopyresampled() kopiert einen rechteckigen Ausschnitt aus einem Quellbild (src_image) in ein Zielbild (dst_image) und skaliert ihn dabei auf die gewünschte Zielgröße. Im Gegensatz zu imagecopyresized() verwendet diese Funktion bilineares Resampling, was zu wesentlich glätteren und qualitativ hochwertigeren Ergebnissen führt – besonders beim Verkleinern von Bildern.
Typische Einsatzgebiete sind das Erstellen von Vorschaubildern (Thumbnails), das Skalieren hochgeladener Bilder auf eine Standardgröße sowie das Ausschneiden und gleichzeitige Skalieren von Bildregionen. Die Funktion eignet sich sowohl für die Verkleinerung als auch die Vergrößerung von Bildinhalten.
Damit die Funktion korrekt arbeitet, muss das Zielbild (dst_image) zuvor mit einer der imagecreate*()-Funktionen erstellt und auf die gewünschte Ausgabegröße dimensioniert werden. Für Bilder mit Transparenz (PNG, GIF) sollte vor dem Kopieren imagealphablending() und imagesavealpha() am Zielbild gesetzt werden, um den Alphakanal korrekt zu übernehmen.
Die Quell- und Zielkoordinaten sowie -dimensionen ermöglichen präzises Cropping und Positionierung: Durch Angabe unterschiedlicher Quell- und Zielgrößen wird der kopierte Bereich automatisch auf die Zielgröße skaliert. Negative Breiten oder Höhen sind nicht erlaubt; für Spiegeleffekte kann jedoch ein anderer Ansatz gewählt werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $dst_image Pflicht | GdImage | Das Zielbild-Ressource-Objekt, in das der Bildbereich kopiert wird. Muss vorab mit z. B. imagecreatetruecolor() erstellt worden sein. |
|
| $src_image Pflicht | GdImage | Das Quellbild-Ressource-Objekt, aus dem der Bildbereich entnommen wird. | |
| $dst_x Pflicht | int | X-Koordinate der oberen linken Ecke im Zielbild, an der der kopierte Bereich eingefügt wird. | |
| $dst_y Pflicht | int | Y-Koordinate der oberen linken Ecke im Zielbild, an der der kopierte Bereich eingefügt wird. | |
| $src_x Pflicht | int | X-Koordinate der oberen linken Ecke des zu kopierenden Ausschnitts im Quellbild. | |
| $src_y Pflicht | int | Y-Koordinate der oberen linken Ecke des zu kopierenden Ausschnitts im Quellbild. | |
| $dst_width Pflicht | int | Breite des Zielbereichs in Pixeln. Der Quellausschnitt wird auf diese Breite skaliert. | |
| $dst_height Pflicht | int | Höhe des Zielbereichs in Pixeln. Der Quellausschnitt wird auf diese Höhe skaliert. | |
| $src_width Pflicht | int | Breite des zu kopierenden Ausschnitts im Quellbild in Pixeln. | |
| $src_height Pflicht | int | Höhe des zu kopierenden Ausschnitts im Quellbild in Pixeln. |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler (z. B. ungültige Bildressourcen oder nicht unterstützte Parameter).Beispiele
Thumbnail aus hochgeladenem Bild erstellen
<?php
// Originalbild laden (z. B. JPEG)
$src = imagecreatefromjpeg('foto.jpg');
// Originalgröße ermitteln
$src_width = imagesx($src);
$src_height = imagesy($src);
// Zielgröße: max. 200×200 Pixel, Seitenverhältnis beibehalten
$max = 200;
$ratio = min($max / $src_width, $max / $src_height);
$dst_width = (int) round($src_width * $ratio);
$dst_height = (int) round($src_height * $ratio);
// Zielbild erstellen
$dst = imagecreatetruecolor($dst_width, $dst_height);
// Skaliert kopieren mit Resampling
imagecopyresampled(
$dst, $src,
0, 0, // Zielposition (oben links)
0, 0, // Quellposition (oben links)
$dst_width, $dst_height, // Zielgröße
$src_width, $src_height // Quellgröße
);
// Thumbnail als JPEG speichern
imagejpeg($dst, 'thumbnail.jpg', 85);
imagedestroy($src);
imagedestroy($dst);
echo 'Thumbnail erstellt: ' . $dst_width . 'x' . $dst_height . ' Pixel';
PNG mit Transparenz korrekt skalieren
<?php
// Transparentes PNG laden
$src = imagecreatefrompng('logo.png');
$src_width = imagesx($src);
$src_height = imagesy($src);
// Zielgröße halbieren
$dst_width = (int) ($src_width / 2);
$dst_height = (int) ($src_height / 2);
// Zielbild erstellen
$dst = imagecreatetruecolor($dst_width, $dst_height);
// Transparenz am Zielbild korrekt konfigurieren
imagealphablending($dst, false);
imagesavealpha($dst, true);
// Transparenten Hintergrund füllen
$transparent = imagecolorallocatealpha($dst, 0, 0, 0, 127);
imagefilledrectangle($dst, 0, 0, $dst_width, $dst_height, $transparent);
// Skaliert kopieren
imagecopyresampled(
$dst, $src,
0, 0,
0, 0,
$dst_width, $dst_height,
$src_width, $src_height
);
// Skaliertes PNG speichern
imagepng($dst, 'logo_klein.png', 9);
imagedestroy($src);
imagedestroy($dst);
echo 'PNG mit Transparenz skaliert gespeichert.';
// Wichtig · Fallstricke
Qualität vs. Geschwindigkeit: imagecopyresampled() ist qualitativ hochwertiger als imagecopyresized(), aber auch etwas langsamer. Für Anwendungen, bei denen Bildqualität wichtig ist (z. B. Fotoplattformen), sollte stets imagecopyresampled() bevorzugt werden.
Transparenz: Bei PNG- und GIF-Bildern mit Transparenzkanal muss das Zielbild explizit mit imagealphablending($dst, false) und imagesavealpha($dst, true) konfiguriert werden, sonst geht die Transparenz verloren und wird durch einen schwarzen Hintergrund ersetzt.
Speicherbedarf: Das Verarbeiten großer Bilder kann sehr viel Arbeitsspeicher verbrauchen. Bei unkontrollierten Datei-Uploads sollte das memory_limit in der php.ini berücksichtigt und ggf. ini_set('memory_limit', '256M') gesetzt werden. Außerdem sollte die Bildgröße vor dem Laden geprüft werden, um Denial-of-Service-Angriffe (z. B. durch sehr große Bilder) zu verhindern.
Ressourcen freigeben: Nach der Verarbeitung sollten alle Bildressourcen mit imagedestroy() freigegeben werden, um Speicherlecks zu vermeiden – besonders bei der Verarbeitung vieler Bilder in einer Schleife.