|
Sendet einen HTTP-
Copy and resize part of an image with resampling
Kopieren und Ändern der Grösse eines Bild-
Erzeugt ein neues Bild im JPEG-
Create a new true color image
Ausgabe des Bildes im Browser oder als Datei
Ermittelt die Bild-
Ermittelt die Bild- |
Tutorials - Fortgeschritten - Bilder und Thumbnails - Bilder verkleinernTutorials - FortgeschrittenBilder und Thumbnails: Bilder verkleinern
Als nächstes werden wir ein sehr großes Bild als kleines Bild anzeigen lassen. Sozusagen das Prinzip des "Thumbnails" Hierzu erstellen wir erst mal ein kleineres, neues, leeres Bild. imageCreate() kann man sehr gut für kleine Grafiken oder so verwenden, für Fotos allerdings ungünstig. Im Folgenden werd ich deswegen imageCreateTrueColor() verwenden. Das neue Bild kann dann mehr mögliche Farben Farben - Echtfarben <?php header("Content-Type: image/jpeg"); $BILD = imageCreateTrueColor(100, 50); /* vom Syntax her identisch zu imageCreate() */ imageJPEG($BILD); ?> Hier verwenden wir nun: imageCopyResized() - wir wollen ja die Größe ändern, resizen Der Befehl ist im Großen und Ganzen identisch zu imageCopy(), hat aber Erweiterungen (blau markiert): imageCopyResized (dst_im, src_im, dst_x, dst_y, src_x, src_y, dst_w, dst_h, src_w, src_h)
<?php header("Content-Type: image/jpeg"); $ORIGINAL = imageCreateFromJPEG("images/gitarre.jpg"); $BILD = imageCreateTrueColor(307, 205); imageCopyResized($BILD, $ORIGINAL, 0, 0, /* kopiere Original in Bild, an Stelle ( 0, 0) */ 0, 0, /* Der zu kopierende Bereich beginnt in $ORIGINAL bei 0, 0 */ 307, 205, /* am Ende der Verkleinerung / Vergrößerung soll der Bereich 307 Pixel breit und 205 Pixel hoch sein ( 1/10 des Originals ) */ 3072, 2048); /* 3072 Bildpunkte in der Breite ( das ist die volle Breite ) und 2048 Bildpunkte in der Höhe sollen vom Quellbild kopiert werden */ imageJPEG($BILD); ?> Also benutze ich immer meine eigene kleine Funktion, die diese 4 Parameter tauscht (nur mal so...) Weiter im Text. Jetzt mal wieder weg von den absoluten Zahlen, wer weiss, vielleicht wollen wir ja mal ein Bild verkleinern, von dem wir gar nicht die genaue Größe kennen. Richtig - das sind nahezu 100%, es sei denn, man hat Lust, bei jedem Bild extra nachzuschauen. Also lassen wir uns von PHP die Größe sagen:
<?php header("Content-Type: image/jpeg"); $ORIGINAL = imageCreateFromJPEG("images/gitarre.jpg"); $oBreite = imageSX($ORIGINAL); /* Dies ist die Originalbreite */ $oHöhe = imageSY($ORIGINAL); /* Dies ist die Originalhöhe */ $nBreite = $oBreite / 10; /* Die neue Breite */ $nHöhe = $oHöhe / 10; /* Die neue Höhe */ $BILD = imageCreateTrueColor($nBreite, $nHöhe); imageCopyResized($BILD, $ORIGINAL, 0, 0, 0, 0, $nBreite, $nHöhe, $oBreite, $oHöhe); imageJPEG($BILD); ?> Macht nix, das geht noch langsamer: Mit imageCopyResampled() - Die Qualität des Bildes ist allerdings besser, das Bild wirkt nicht mehr so "körnig". Der Syntax ist exakt der gleiche wie imageCopyResized(). Das fällt vor allem auf, wenn man das Bild sehr sehr klein schrumpft: Wähle aus, wie das Bild erstellt werden soll:";
<?php header("Content-Type: image/jpeg"); $ORIGINAL = imageCreateFromJPEG("images/gitarre.jpg"); $oBreite = imageSX($ORIGINAL); $oHöhe = imageSY($ORIGINAL); $nBreite = $oBreite / 10; /* nochmal kleiner das Bild */ $nHöhe = $oHöhe / 10; $BILD = imageCreateTrueColor($nBreite, $nHöhe); if($_POST[useResampled] == 1) { imageCopyResampled($BILD, $ORIGINAL, 0, 0, 0, 0, $nBreite, $nHöhe, $oBreite, $oHöhe); } else { imageCopyResized($BILD, $ORIGINAL, 0, 0, 0, 0, $nBreite, $nHöhe, $oBreite, $oHöhe); } imageJPEG($BILD); ?> FormularQuelltext anzeigen
<html>
<form method="post" action="/script.php"> <input type="radio" name="useResampled" value="0" checked> Resized benutzen<br /> <input type="radio" name="useResampled" value="1"> Resampled benutzen<br /> <input type="submit" name="absenden" value="Script starten"> </form> </html> |