首頁  >  文章  >  後端開發  >  PHP改變圖片的尺寸大小方法實例

PHP改變圖片的尺寸大小方法實例

小云云
小云云原創
2018-03-31 15:30:144517瀏覽

本文主要和大家分享,PHP改變圖片的尺寸大小方法實例,希望能幫助大家。

改變圖片的尺寸是一個很常見的功能需求,以下開始研究下關於PHP改變圖片尺寸的方法。先介紹一個自己寫的函數。

01
#
02
##03 # $imgsrc = "http://www.nowamagic.net/images/3.jpg";
#
04 $寬度 = 780;
05$高 = 420;
###
06  
##07 resizejpg($imgsrc,$imgdst,$width,$height);
#
08  
##09 函數 resizejpg($imgsrc,$imgdst,$imgwidth,$imgheight)
10 {
#
11     //$imgsrc jpg格式圖片路徑 $imgdst jpg格式圖片儲存檔名 $imgwidth要改變的寬度 $imgheight要改變的高度
12     //取得圖片的寬度,高度值
#####################################################################
13     $arr = getimagesize($imgsrc);                    
14      header("內容類型: 圖片/jpg");
#15      
##########
16     $imgWidth = $imgwidth;
########################################## #17 ######    $imgHeight = $imgheight;############
18     // 建立影像並定義顏色
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 -- 重採樣拷貝部分影像並調整大小。

int imagecopyresampled ( resource dst_im, resource src_im, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH)#pample#pim;幅影像中的一塊正方形區域拷貝到另一個影像中,平滑地插入像素值,因此,尤其是,減小了影像的大小而仍然保持了極大的清晰度。 dst_im 和 src_im 分別是目標影像和來源影像的識別碼。如果來源和目標的寬度和高度不同,則會進行相應的影像收縮和拉伸。座標指的是左上角。本函數可用於在同一幅圖內部拷貝(如果 dst_im 和 src_im 相同的話)區域,但如果區域交迭的話則結果不可預測。

附註: 因為調色盤影像限制(255+1 種顏色)有個問題。重採樣或濾波影像通常需要多於 255 種顏色,計算新的被重採樣的像素及其顏色時採用了一種近似值。對調色板圖像嘗試分配新顏色時,如果失敗我們選擇了計算結果最接近(理論上)的顏色。這並不總是視覺上最接近的顏色。這可能會產生怪異的結果,例如空白(或視覺上是空白)的圖像。要跳過這個問題,請使用真彩色圖像作為目標圖像,例如用 imagecreatetruecolor() 建立的。

附註: imagecopyresampled() 需要 GD 2.0.l 或更高版本。

一個簡單的範例:

01
02 // 檔案
03 #$filename = 'test.jpg';
04 $百分比= 0.5;
##05  
################################
06 // 內容類型
07 header('內容類型: 圖片/jpeg');
08  
##09 // 取得新維度
#
10 清單($寬度,$高度) = getimagesize($檔名);
11$new_width = $width * $percent;
###
12 $new_height = $height * $percent;
#13  
#
14 // 重新取樣
15 $image_p = imagecreatetruecolor($new_width, $new_height);
#
16 $圖片= imagecreatefromjpeg($filename);
##17 imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
18  
19 // 輸出##########
20 imagejpeg($image_p, 空, 100);
#21 ?>

示例2:

view source

print?

01
02 // 檔案
03 #$filename = 'test.jpg';
04  
05 // 設定最大高度和寬度
06$width = 200;
###
07 $高度 = 200;
08 
##################################
09 // 內容類型
10 header('內容類型: 圖片/jpeg');
11  
12 // 取得新維度
####
13 list($width_orig, $height_orig) = getimagesize($檔名);
# #
#14
15 $ratio_orig = $width_orig/$height_orig;
#16  
#
17 if($寬度/$高度>$ratio_orig) {
18 #   $width = $height*$ratio_orig;
#
19 } 其他 {
##20    $height = $width/$ratio_orig;
#
21 }
22
#
23 // 重新取樣
24 $image_p = imagecreatetruecolor($width, $height);
#
25 $圖片= imagecreatefromjpeg($filename);
26imagecopyresampled($image_p, $image, 0, 0, 0, 0, $寬度, $高度, $width_orig, $height_orig);
###
27
##28 // 輸出##########
29 imagejpeg($image_p, 空, 100);
#30 ?>

有兩種改變影像大小的方法:

  • ImageCopyResized() 函數在所有GD版本中有效,但其縮放影像的演算法比較粗糙。

  • ImageCopyResamples(),其像素插值演算法得到的影像邊緣較為平滑。 (但函數的速度比 ImageCopyResized() 慢)。

兩個函數的參數是一樣的,如下:

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

#範例:

01 #
02 $src = ImageCreateFromJPEG('php.jpg');
##03 $width = ImageSx($src);
#
04 $高度 = ImageSy($src);
#05 $x = $widht/2;
06 $y = $height/2;
07 $dst= ImageCreateTrueColor($x,$y);
08 ImageCopyResampled($dst,$src,0,0,0,0,$x,$y,$widht,$height);
09 header('內容類型 : 圖片/png');
#
#10 ImagePNG($det);
11 ?

以上是PHP改變圖片的尺寸大小方法實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn