Heim > Backend-Entwicklung > PHP-Tutorial > Beispiel, wie man die Größe eines Bildes in PHP ändert

Beispiel, wie man die Größe eines Bildes in PHP ändert

小云云
Freigeben: 2023-03-22 21:56:01
Original
4546 Leute haben es durchsucht

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.

01
02
03$imgsrc = "http://www.nowamagic.net/images/3.jpg";
04$width = 780;
05$height = 420;
06
07resizejpg($imgsrc,$imgdst,$width,$height);
08
09function resizejpg($imgsrc,$imgdst,$imgwidth,$imgheight)
10{
11 //$imgsrc jpg格式图像路径 $imgdst jpg格式图像保存文件名 $imgwidth要改变的宽度 $imgheight要改变的高度
12 //取得图片的宽度,高度值
13 $arr = getimagesize($imgsrc);
14 header("Content-type: image/jpg");
15
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]);
22 imagepng($image);
23 imagedestroy($image);
24}
25
26?>

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:

01
02// The file
03$filename = 'test.jpg';
04$percent = 0.5;
05
06// Content type
07header('Content-Type: image/jpeg');
08
09// Get new dimensions
10list($width, $height) = getimagesize($filename);
11$new_width = $width * $percent;
12$new_height = $height * $percent;
13
14// Resample
15$image_p = imagecreatetruecolor($new_width, $new_height);
16$image = imagecreatefromjpeg($filename);
17imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
18
19// Output
20imagejpeg($image_p, null, 100);
21?>

Beispiel 2:

Ansicht Quelle

drucken?

01
02// The file
03$filename = 'test.jpg';
04
05// Set a maximum height and width
06$width = 200;
07$height = 200;
08
09// Content type
10header('Content-Type: image/jpeg');
11
12// Get new dimensions
13list($width_orig, $height_orig) = getimagesize($filename);
14
15$ratio_orig = $width_orig/$height_orig;
16
17if ($width/$height > $ratio_orig) {
18    $width = $height*$ratio_orig;
19 } else {
20    $height = $width/$ratio_orig;
21 }
22  
23 // Resample
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);
27  
28 // Output
29 imagejpeg($image_p, null, 100);
30 ?>

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:

01
02$src = ImageCreateFromJPEG('php.jpg');
03$width = ImageSx($src);
04$height = ImageSy($src);
05$x = $widht/2;
06$y = $height/2;
07$dst = ImageCreateTrueColor($x,$y);
08ImageCopyResampled($dst,$src,0,0,0,0,$x,$y,$widht,$height);
09header('Content-Type : image/png');
10ImagePNG($det);
11?>

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage