Heim  >  Artikel  >  Backend-Entwicklung  >  Beispielanalyse zum Ändern der Bildgröße in PHP

Beispielanalyse zum Ändern der Bildgröße in PHP

黄舟
黄舟Original
2017-07-26 13:43:181627Durchsuche

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.

Stellen Sie zunächst eine von mir selbst geschriebene Funktion vor.

<?php 
$imgsrc = "http://www.nowamagic.net/images/3.jpg"; 
$width = 780; 
$height = 420; 
resizejpg($imgsrc,$imgdst,$width,$height); 
function resizejpg($imgsrc,$imgdst,$imgwidth,$imgheight) 
{ 
//$imgsrc jpg格式图像路径 $imgdst jpg格式图像保存文件名 $imgwidth要改变的宽度 $imgheight要改变的高度 
//取得图片的宽度,高度值 
$arr = getimagesize($imgsrc); 
header("Content-type: image/jpg"); 
$imgWidth = $imgwidth; 
$imgHeight = $imgheight; 
// Create image and define colors 
$imgsrc = imagecreatefromjpeg($imgsrc); 
$image = imagecreatetruecolor($imgWidth, $imgHeight); //创建一个彩色的底图 
imagecopyresampled($image, $imgsrc, 0, 0, 0, 0,$imgWidth,$imgHeight,$arr[0], $arr[1]); 
imagepng($image); 
imagedestroy($image); 
} 
?>

imagecopyresampled
imagecopyresampled – Teil des kopierten Bilds neu abtasten und in der Größe ändern.
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() nimmt ein Quadrat in einem Bild. Regionen sind in ein anderes Bild kopiert, dabei Pixelwerte stufenlos interpoliert und so unter anderem die Größe des Bildes bei gleichzeitig hoher Schärfe reduziert wird. 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:

Der Code lautet wie folgt:

<?php 
// The file 
$filename = &#39;test.jpg&#39;; 
$percent = 0.5; 
// Content type 
header(&#39;Content-Type: image/jpeg&#39;); 
// Get new dimensions 
list($width, $height) = getimagesize($filename); 
$new_width = $width * $percent; 
$new_height = $height * $percent; 
// Resample 
$image_p = imagecreatetruecolor($new_width, $new_height); 
$image = imagecreatefromjpeg($filename); 
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); 
// Output 
imagejpeg($image_p, null, 100); 
?>


Beispiel 2:

<?php 
// The file 
$filename = &#39;test.jpg&#39;; 
// Set a maximum height and width 
$width = 200; 
$height = 200; 
// Content type 
header(&#39;Content-Type: image/jpeg&#39;); 
// Get new dimensions 
list($width_orig, $height_orig) = getimagesize($filename); 
$ratio_orig = $width_orig/$height_orig; 
if ($width/$height > $ratio_orig) { 
$width = $height*$ratio_orig; 
} else { 
$height = $width/$ratio_orig; 
} 
// Resample 
$image_p = imagecreatetruecolor($width, $height); 
$image = imagecreatefromjpeg($filename); 
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig); 
// Output 
imagejpeg($image_p, null, 100); 
?>


Es gibt zwei Möglichkeiten, die Größe eines 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:

Der Code lautet wie folgt:

imageCopyResampled(dest,src,dy,dx,sx,sy,dw,dh,sw,sh); 
imageCopyResized(dest,src,dy,dx,sx,sy,dw,dh,sw,sh);


Beispiel:

<?PHP 
$src = ImageCreateFromJPEG(&#39;php.jpg&#39;); 
$width = ImageSx($src); 
$height = ImageSy($src); 
$x = $widht/2; 
$y = $height/2; 
$dst = ImageCreateTrueColor($x,$y); 
ImageCopyResampled($dst,$src,0,0,0,0,$x,$y,$widht,$height); 
header(&#39;Content-Type : image/png&#39;); 
ImagePNG($det); 
?>


So ändern Sie die Größe von JPG-Bilddateien in PHP

Der Code lautet wie folgt:

<? 
function resize_jpg($img,$w,$h){ 
// $thumb = imagecreate ($w, $h); 
$image = imagecreatefromjpeg($img); 
$imagedata = getimagesize($img); 
if ($h = "auto") $h = $w/($imagedata[0]/$imagedata[1]);//根据原图的纵横比得出高度! 
$thumb = imagecreatetruecolor ($w, $h); 
imagecopyresized ($thumb, $image, 0, 0, 0, 0, $w, $h, $imagedata[0], $imagedata[1]); 
imagejpeg($thumb); 
} 
//resize_jpg($file,$w,$h); 
resize_jpg("images/dsc01244.jpg",100,100); 
imagedestory($thumb); 
imagedestory($image); 
?>


Funktionscode:

<?php 
/* 
* 图片缩略图 
* $srcfile 来源图片, 
* $rate 缩放比,默认为缩小一半,或者具体宽度象素值 
* $filename 输出图片文件名jpg 
* 例如: resizeimage("zt32.gif",0.1); 
* 例如: resizeimage("zt32.gif",250 ); 
* 说明:调用时直接把函数的结果放在HTML文件IMG标签中的SRC属性里 
*/ 
function resizeimage($srcfile,$rate=.5, $filename = "" ){ 
$size=getimagesize($srcfile); 
switch($size[2]){ 
case 1: 
$img=imagecreatefromgif($srcfile); 
break; 
case 2: 
$img=imagecreatefromjpeg($srcfile); 
break; 
case 3: 
$img=imagecreatefrompng($srcfile); 
break; 
default: 
exit; 
} 
//源图片的宽度和高度 
$srcw=imagesx($img); 
$srch=imagesy($img); 
//目的图片的宽度和高度 
if($size[0] <= $rate || $size[1] <= $rate){ 
$dstw=$srcw; 
$dsth=$srch; 
}else{ 
if($rate <= 1){ 
$dstw=floor($srcw*$rate); 
$dsth=floor($srch*$rate); 
}else { 
$dstw=$rate; 
$rate = $rate/$srcw; 
$dsth=floor($srch*$rate); 
} 
} 
//echo "$dstw,$dsth,$srcw,$srch "; 
//新建一个真彩色图像 
$im=imagecreatetruecolor($dstw,$dsth); 
$black=imagecolorallocate($im,255,255,255); 
imagefilledrectangle($im,0,0,$dstw,$dsth,$black); 
imagecopyresized($im,$img,0,0,0,0,$dstw,$dsth,$srcw,$srch); 
// 以 JPEG 格式将图像输出到浏览器或文件 
if( $filename ) { 
//图片保存输出 
imagejpeg($im, $filename ); 
}else { 
//图片输出到浏览器 
imagejpeg($im); 
} 
//释放图片 
imagedestroy($im); 
imagedestroy($img); 
} 
?>


Das obige ist der detaillierte Inhalt vonBeispielanalyse zum Ändern der Bildgröße in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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