burghi'sphp-dummies.de
PHP für Einsteiger und Fortgeschrittenere - an laufenden Scripten erklärt
10.02.2012, 09:40 Uhr - Impressum
Sendet einen HTTP-Header in Rohform
Kopiert einen Bildausschnitt
Erzeugt ein neues Bild im JPEG-Format, welches aus einer Datei oder von einer URL gelesen wird
Erzeugt ein neues Bild im PNG-Format, welches aus einer Datei oder von einer URL gelesen wird
Ausgabe des Bildes im Browser oder als Datei
Ermittelt die Bild-Breite
Ermittelt die Bild-Höhe

Tutorials - Fortgeschritten - Bilder und Thumbnails - imageCopy

Tutorials - Fortgeschritten
Bilder und Thumbnails: imageCopy
Nun sind wir bereit, ein Bild über ein anderes Bild zu kopieren.
Zuerst öffnen wir 2 Bilder - einmal das Bild der Wiese und eine Grafik einer Sonne als PNG, das Tranparenz besitzt und so schön darüber gelegt werden kann.
Die Bilder werden in 2 Variablen gespeichert.

Den Rest erledigt imageCopy(). imageCopy() wird geläufig so definiert:

imageCopy(dst_im, src_im, dst_x, dst_y, src_x, src_y, src_w, src_h)

Übersetzt:
dst_imdestination imagein welches Bild soll kopiert werden ? (hier in $BILD)
dst_xdestination xWertkopiere in das neue Bild, und lasse ... Bildpunkte links frei
dst_ydestination yWertkopiere in das neue Bild, und lasse ... Bildpunkte oben frei
src_xsource xWertdas ganze Quellbild ($ORIGINAL) soll kopiert werden ab ... Pixel von links
src_ysource xWertdas ganze Quellbild ($ORIGINAL) soll kopiert werden ab ... Pixel von oben
src_wsource width... Bildpunkte in der Breite sollen vom Quellbild kopiert werden
src_hdestination image... Bildpunkte in der Höhe sollen vom Quellbild kopiert werden
benutzte Bilder wiese.jpg sonne.png
<?php
header("Content-Type: image/jpeg");
$Wiese = imageCreateFromJPEG("images/wiese.jpg");
$Sonne = imageCreateFromPNG("images/sonne.png");

imageCopy($Wiese, $Sonne,
               0, 0,     /* imagecopy() an die Stelle ( 0, 0) in $Wiese, */
               0, 0,     /* der zu kopierende Bereich beginnt in $Sonne bei ( 0, 0) */
               96, 90);      /* und ist 96 Pixel breit und 90 Pixel hoch */

imageJPEG($Wiese);
?>
Das erfordert hin und wieder eine ganz schön unangenehme Denkarbeit mit diesen Parametern...
Und man kann leicht den Überblick verlieren.
Aber es führt vorerst kein Weg vorbei.

Wollen wir nun die Sonne in die Mitte rücken, müssen wir uns überlegen, wie weit der Abstand zum linken Rand sein soll, denn eine "zentriert"-Einkopierfunktion gibt es nicht (oder ich kenne sie nicht).

Das Zielbild ($Wiese) hat eine Breite von 500.
Das Quellbild ($Sonne) hat eine Breite von 96.

Das Bild muss nun also an die Stelle (500 / 2) - (96 / 2) = 202
benutzte Bilder wiese.jpg sonne.png
<?php
header("Content-Type: image/jpeg");
$Wiese = imageCreateFromJPEG("images/wiese.jpg");
$Sonne = imageCreateFromPNG("images/sonne.png");

imageCopy($Wiese, $Sonne,
               202, 0,     /* imagecopy() an die Stelle ( 202, 0) in $Wiese, */
               0, 0,     /* der zu kopierende Bereich beginnt in $Sonne bei ( 0, 0) */
               96, 90);      /* und ist 96 Pixel breit und 90 Pixel hoch */

imageJPEG($Wiese);
?>
Die Bildbreiten kenne ich, weil ich die Bilder in Photoshop selbst so gemacht habe.
Was aber wenn man die Breiten nicht kennt ?

Man lässt PHP die Breiten und Höhen zurückgeben:
benutzte Bilder wiese.jpg
<?php
$Wiese = imageCreateFromJPEG("images/wiese.jpg");

$wieseBreite = imageSX($Wiese);
$wieseHoehe = imageSY($Wiese);

echo "Format Wiese: $wieseBreite x $wieseHoehe Pixel";
?>
Dann schaut das so aus:
benutzte Bilder wiese.jpg sonne.png
<?php
header("Content-Type: image/jpeg");
$Wiese = imageCreateFromJPEG("images/wiese.jpg");
$Sonne = imageCreateFromPNG("images/sonne.png");

$WieseX = imageSX($Wiese);
$SonneX = imageSX($Sonne);
$SonneY = imageSY($Sonne);

imageCopy($Wiese, $Sonne, ($WieseX / 2 - $SonneX / 2), 0, 0, 0, $SonneX, $SonneY);
imageJPEG($Wiese);
?>
© 2004-2005 - Impressum