Signatur
Beschreibung
imagecopyresized() kopiert einen definierten Ausschnitt aus einem Quell-GdImage-Objekt und fügt ihn – bei Bedarf skaliert – an einer bestimmten Position in ein Ziel-GdImage-Objekt ein. Sowohl Quell- als auch Zielrechteck können frei in Größe und Position bestimmt werden, was eine präzise Kontrolle über Bildausschnitt und Skalierungsbereich ermöglicht.
Im Gegensatz zur moderneren Funktion imagecopyresampled() verwendet imagecopyresized() eine einfache Skalierungsmethode ohne Interpolation. Das bedeutet, dass Pixel lediglich vervielfacht oder übersprungen werden, was bei starker Verkleinerung oder Vergrößerung zu sichtbaren Pixelierungsartefakten (Treppeneffekten) führen kann. Für qualitativ hochwertige Skalierungen sollte daher imagecopyresampled() bevorzugt werden.
imagecopyresized() eignet sich besonders für Anwendungsfälle, bei denen Geschwindigkeit wichtiger ist als Qualität, z. B. bei der schnellen Erzeugung von Vorschaubildern (Thumbnails) aus großen Mengen von Bildern oder in ressourcenbeschränkten Umgebungen.
Beide Bilder müssen zuvor mit einer GD-Funktion wie imagecreatetruecolor(), imagecreatefromjpeg() o. Ä. erzeugt worden sein. Nach Abschluss aller Bildoperationen sollten die GdImage-Objekte mit imagedestroy() freigegeben werden (in PHP 8+ geschieht dies automatisch über den Destruktor).
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $dst_image Pflicht | GdImage | Das Ziel-Bildobjekt, in das der skalierte Bereich eingefügt wird. | |
| $src_image Pflicht | GdImage | Das Quell-Bildobjekt, aus dem der Bereich entnommen wird. | |
| $dst_x Pflicht | int | X-Koordinate der oberen linken Ecke des Zielrechtecks im Zielbild (in Pixeln). | |
| $dst_y Pflicht | int | Y-Koordinate der oberen linken Ecke des Zielrechtecks im Zielbild (in Pixeln). | |
| $src_x Pflicht | int | X-Koordinate der oberen linken Ecke des Quellrechtecks im Quellbild (in Pixeln). | |
| $src_y Pflicht | int | Y-Koordinate der oberen linken Ecke des Quellrechtecks im Quellbild (in Pixeln). | |
| $dst_w Pflicht | int | Breite des Zielrechtecks in Pixeln. Weicht dieser Wert von src_w ab, wird horizontal skaliert. |
|
| $dst_h Pflicht | int | Höhe des Zielrechtecks in Pixeln. Weicht dieser Wert von src_h ab, wird vertikal skaliert. |
|
| $src_w Pflicht | int | Breite des aus dem Quellbild zu entnehmenden Bereichs in Pixeln. | |
| $src_h Pflicht | int | Höhe des aus dem Quellbild zu entnehmenden Bereichs in Pixeln. |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler (z. B. wenn ungültige Bildobjekte übergeben werden).Beispiele
Einfaches Thumbnail aus einem JPEG erstellen
<?php
// Originalbild laden
$src = imagecreatefromjpeg('foto.jpg');
$src_w = imagesx($src);
$src_h = imagesy($src);
// Zielgröße: 150 x 100 Pixel
$dst_w = 150;
$dst_h = 100;
// Zielbild anlegen
$dst = imagecreatetruecolor($dst_w, $dst_h);
// Gesamtes Quellbild in das Zielbild kopieren und skalieren
imagecopyresized($dst, $src, 0, 0, 0, 0, $dst_w, $dst_h, $src_w, $src_h);
// Thumbnail als JPEG ausgeben
header('Content-Type: image/jpeg');
imagejpeg($dst, null, 85);
// Ressourcen freigeben
imagedestroy($src);
imagedestroy($dst);
?>
Nur einen Ausschnitt des Quellbildes skaliert einfügen
<?php
// Quellbild laden (z. B. 800x600 Pixel)
$src = imagecreatefromjpeg('landschaft.jpg');
// Zielbild erstellen (200x150 Pixel)
$dst = imagecreatetruecolor(200, 150);
// Nur den mittleren Bereich des Quellbildes (400x300 ab Position 200,150)
// auf die gesamte Zielfläche von 200x150 skalieren
imagecopyresized(
$dst,
$src,
0, // Ziel X
0, // Ziel Y
200, // Quelle X (Ausschnitt-Start)
150, // Quelle Y (Ausschnitt-Start)
200, // Ziel-Breite
150, // Ziel-Höhe
400, // Quell-Breite des Ausschnitts
300 // Quell-Höhe des Ausschnitts
);
// Bild als PNG speichern
imagepng($dst, 'ausschnitt_thumb.png');
imagedestroy($src);
imagedestroy($dst);
echo 'Ausschnitt gespeichert.';
?>
// Wichtig · Fallstricke
Qualität: imagecopyresized() verwendet keine Interpolation. Bei starker Skalierung entstehen deutlich sichtbare Treppenartefakte. Für bessere Qualität sollte imagecopyresampled() verwendet werden, das bilineare Interpolation einsetzt.
Transparenz: Bei der Arbeit mit PNG-Bildern mit Alphakanal muss vor dem Kopieren imagealphablending($dst, false) und imagesavealpha($dst, true) gesetzt werden, damit Transparenz korrekt übertragen wird.
Speicher: Sehr große Quellbilder können erheblich Arbeitsspeicher beanspruchen. Das PHP-Speicherlimit (memory_limit) in der php.ini sollte ggf. angepasst werden.