Dieser Artikel zeigt Ihnen hauptsächlich, wie Sie die Größe eines Bildes in PHP ändern können. Ich hoffe, er kann Ihnen helfen.
Das Ändern der Größe eines Bildes ist eine sehr häufige Funktionsanforderung. Beginnen wir mit der Untersuchung, wie man die Größe eines Bildes in PHP ändert. Lassen Sie mich zunächst eine Funktion vorstellen, die ich selbst geschrieben habe.
03 | $imgsrc = "http://www.nowamagic.net/images/3.jpg"; |
07 | resizejpg($imgsrc,$imgdst,$width,$height); |
09 | function resizejpg($imgsrc,$imgdst,$imgwidth,$imgheight) |
11 | //$imgsrc
jpg格式图像路径 $imgdst jpg格式图像保存文件名 $imgwidth要改变的宽度 $imgheight要改变的高度 |
13 | $arr = getimagesize($imgsrc); |
14 | header("Content-type:
image/jpg"); |
16 | $imgWidth = $imgwidth; |
17 | $imgHeight = $imgheight; |
18 | //
Create image and define colors |
19 | $imgsrc =
imagecreatefromjpeg($imgsrc); |
20 | $image =
imagecreatetruecolor($imgWidth, $imgHeight); //创建一个彩色的底图 |
21 | imagecopyresampled($image, $imgsrc,
0, 0, 0, 0,$imgWidth,$imgHeight,$arr[0], $arr[1]); |
imagecopyresampled
imagecopyresampled – Resample einen Teil des Bildes und ändert seine Größe.
int imagecopyresampled ( Ressource dst_im, Ressource src_im, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH)
imagecopyresampled() Kopiert a quadratische Fläche von einem Bild zum anderen zu übertragen, Pixelwerte stufenlos zu interpolieren und so unter anderem die Größe des Bildes zu reduzieren und dennoch eine hohe Schärfe beizubehalten. dst_im und src_im sind die Kennungen des Zielbilds bzw. des Quellbilds. Wenn Quelle und Ziel unterschiedliche Breiten und Höhen haben, wird das Bild entsprechend verkleinert und gestreckt. Die Koordinaten beziehen sich auf die obere linke Ecke. Diese Funktion kann zum Kopieren von Regionen innerhalb desselben Bildes verwendet werden (wenn dst_im und src_im gleich sind), aber die Ergebnisse sind unvorhersehbar, wenn sich die Regionen überlappen.
Hinweis: Aufgrund der Palettenbildbeschränkung (255+1 Farben) liegt ein Problem vor. Das erneute Abtasten oder Filtern eines Bildes erfordert oft mehr als 255 Farben, und bei der Berechnung der neuen neu berechneten Pixel und ihrer Farben wird eine Näherung verwendet. Wenn wir versuchen, einem Palettenbild eine neue Farbe zuzuweisen, wählen wir, wenn dies fehlschlägt, die am nächsten (theoretisch) berechnete Farbe. Dies ist nicht immer die optisch am nächsten kommende Farbe. Dies kann zu seltsamen Ergebnissen führen, beispielsweise zu leeren (oder optisch leeren) Bildern. Um dieses Problem zu umgehen, verwenden Sie ein Truecolor-Bild als Zielbild, beispielsweise eines, das mit imagecreatetruecolor() erstellt wurde.
Hinweis: imagecopyresampled() erfordert GD 2.0.l oder höher.
Ein einfaches Beispiel:
03 | $filename = 'test.jpg'; |
07 | header('Content-Type:
image/jpeg'); |
10 | list($width, $height)
= getimagesize($filename); |
11 | $new_width = $width * $percent; |
12 | $new_height = $height * $percent; |
15 | $image_p =
imagecreatetruecolor($new_width, $new_height); |
16 | $image =
imagecreatefromjpeg($filename); |
17 | imagecopyresampled($image_p, $image,
0, 0, 0, 0, $new_width, $new_height, $width, $height); |
20 | imagejpeg($image_p,
null, 100); |
Beispiel 2:
Ansicht
Quelle
drucken?
03 | $filename = 'test.jpg'; |
05 | //
Set a maximum height and width |
10 | header('Content-Type:
image/jpeg'); |
13 | list($width_orig, $height_orig)
= getimagesize($filename); |
15 | $ratio_orig = $width_orig/$height_orig; |
17 | if ($width/$height > $ratio_orig)
{ |
18 |
$width = $height*$ratio_orig; |
20 |
$height = $width/$ratio_orig; |
24 |
$image_p =
imagecreatetruecolor($width, $height); |
25 |
$image =
imagecreatefromjpeg($filename); |
26 |
imagecopyresampled($image_p, $image,
0, 0, 0, 0, $width, $height, $width_orig, $height_orig); |
29 |
imagejpeg($image_p,
null, 100); |
Es gibt zwei Möglichkeiten, die Größe des Bildes zu ändern:
Die Funktion ImageCopyResized() ist in allen GD-Versionen gültig, ihr Algorithmus zum Skalieren von Bildern ist jedoch grob.
ImageCopyResamples(), die durch seinen Pixelinterpolationsalgorithmus erhaltenen Bildkanten sind relativ glatt. (Aber diese Funktion ist langsamer als ImageCopyResized()).
Die Parameter der beiden Funktionen sind wie folgt identisch:
1 |
imageCopyResampled(dest,src,dy,dx,sx,sy,dw,dh,sw,sh); |
2 |
imageCopyResized(dest,src,dy,dx,sx,sy,dw,dh,sw,sh); |
Beispiel:
02 | $src =
ImageCreateFromJPEG('php.jpg'); |
03 | $width =
ImageSx($src); |
04 | $height =
ImageSy($src); |
07 | $dst =
ImageCreateTrueColor($x,$y); |
08 | ImageCopyResampled($dst,$src,0,0,0,0,$x,$y,$widht,$height); |
09 | header('Content-Type
: image/png'); |
Das obige ist der detaillierte Inhalt vonBeispiel, wie man die Größe eines Bildes in PHP ändert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!