Start · Sprachen · PHP · Referenz · imagecopyresized

imagecopyresized

Funktion

Kopiert einen rechteckigen Bereich eines Quellbildes in ein Zielbild und skaliert ihn dabei auf die angegebene Zielgröße.

seit PHP 4.0.0 Kategorie: image

Signatur

imagecopyresized(GdImage $dst_image, GdImage $src_image, int $dst_x, int $dst_y, int $src_x, int $src_y, int $dst_w, int $dst_h, int $src_w, int $src_h): bool

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

Typ
bool
Beschreibung
Gibt 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.';
?>
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.