首頁 >後端開發 >php教程 >php產生略縮圖程式碼

php產生略縮圖程式碼

高洛峰
高洛峰原創
2016-12-01 10:00:101827瀏覽

雖然在HTML中可以透過指定圖片的寬度和高度來隨意縮放圖片,但是這種方法不會減少圖片的像素數目。圖形檔案的尺寸沒有改變,當然也不會加快圖片下載的速度了。當然也可以手動透過圖形軟體產生圖片的縮圖,但對於大量的圖片展示來說,這個工作量將會十分巨大。為此微縮圖的自動產生程式就被設計出來了。 
PHP中提供的imagecopyresized函數就可以用來產生真正的縮減圖片。此函數的標推 
語法如下: 
語法:int imagecopyresized(int dst_im,int src_im,int dstX,int dstY, 
int srcX,int srcY,int dstW,int dstH,int src),int數值:整數 
函數種類:圖形處理 
內容說明:本函數可複製新圖,並重新調整圖片的大小尺寸。參數都是目的在前,來源在後。參數dst im及src_im為圖片的handle。參數dstX、dstY、srcX、srcY分別為目的及來源的座標。參數dstW、dstH、srcW、srcH分別為來源及目的的寬及高,欲調整的新圖的尺寸就在這裡配置。 
下面舉個例子來說明這個函數的用法,對應的程式thumb.php如程式清單12—5所示。

程式清單12—5 thumb.php 
複製程式碼 程式碼如下: 
 
// 本函數從原始檔取出影像,設定成指定大小,並輸出至目的檔案 
// 原始檔格式:gif, jpg,png 
// 目的檔案格式:gif 
// $srcFile:原始檔 
// $dstFile: 目標檔案 
// $dstW:目標圖片寬度 
// $dstH:目標檔案高度srcFile,$dstFile,$dstW,$dstH) 

$data = GetImageSize($srcFile,&$info); 
switch ($data[2]) 

case 1:100mase 1:$amase @$imS$imcase 1:$Smase 1:$$im; srcFile); 
break; 
case 2: 
$imgsrc = @ImageCreateFromJPEG($srcFile); 
break; 
case 3: 
$imgsmbreak @Imreate $srcW = ImageSX( $imgsrc); 
$srcH = ImageSY($imgsrc); 
$ni = ImageCreate($dstW,$dstH); 
ImageCopyResized($ni,$imgsrc,0,0,0,0,$H,0,0,$ $srcW,$srcH); 
Imagegif($ni,$dstFile); 
// 如果需要輸出到瀏覽器,那麼將上一句改為ImageJpeg($ni); 
// 如果需要其他格式的圖片,改動最後一句話就可以了 

?> 

在這個例子中,首先透過getimagesize()函數獲得來源圖片的情況,再用imagecreatefromgif()、 
imagecreatefromjpeg()或imagecreatefromgifng()建立一個來源
imagecreatefromjpeg()或imagecreatefromgifng()建立一個來源
imagecreatefromjpeg()或imagecreatefromgifng()建立一個原始位元圖,然後用 
imagecreate()函數建立一個目標位圖,其長、寬各是來源位圖的一半。接著呼叫imagecopyresized() 
函數,將來源位圖縮小後拷貝到目標位圖中,最後再用imagegif()函數產生縮圖。 
這裡所用到的圖形處理函數就是由安裝的GD函式庫所提供的,現對其分別進行說明。首先 
介紹getimagesize()函數,其標準語法如下。
語法:array getimagesize(string filename,array [imageinfo]); 
回傳值:陣列 
函數種類:圖形處理 
內容說明:此函數可用來取得GIF、JPEG及PNG 3種WWW上圖片的高與寬,不需要安裝GD library就可以便用本函數。傳回的陣列有4個元素,傳回陣列的第一個元素(索引值0)是圖片的高度,單位是像素(pixel);第二個元素(索引值1)是圖片的寬度;第三個元素(索引值2)是圖片的檔案格式,其值1為GIF格式、2為JPEG/JPG格式、3為PNG格式; 
第四個元素(索引值3)為圖片的高與寬字串,height =xxx width=yyy。 
透過getimagesize()函數的應用,能輕易取得圖片的各種資訊。以下給大家一個獲取圖片寬度、高度、格式、檔案大小的資訊的例子,來進一步領會getimagesize()函數的使用 技巧。
程序imginfo如程序清單12—6所示。

程式清單12-6 imginfo.php 
複製程式碼 程式碼如下: 
function getImageInfo($img) //$img為映像檔絕對路徑 
{$Š
,$info = ($img_info[2]) 

case 1: 
$imgtype = "GIF"; 
break; 
case 2: 
$imgtype = "JPG"; 
case 2: 
$imgtype = "JPG"; 
case 2: 
$imgtype = "JPG"; 
break; ; 
break; 

$img_type = $imgtype."圖片"; 
$img_size = ceil(filesize($img)/1000)."k"; //擷取檔案大小width"=>$img_info[0], 
"height"=>$img_info[1], 
"type"=>$img_type, 
"size"=>$img_size 
); 
print " width"; 
print $img_info[0]; 
print " height"; 
print $img_info[1]; format"; 
print $img_type; 
print " size"; 
print $img_size; 
print $new_img_info; 


$img = "//www/htgetI/m/www.m. ; 
?> 


在程式12-5中要建立一個縮圖,需要先建立一個用來繪圖的空白的畫布。 
ImageCreate函數可以做到這一點。它將傳回一個影像的標識符,並且需要告訴函數用像素 
計算的畫布有多大(x(寬度)與y(高度))。在程式12-5中使用的圖形建立函數imagecreate() 
的標準語法如下: 
語法:int imagecreate(int x_size,int y_size); 
回傳值:整數 
函數類型:圖形處理 
內容說明:本函數用來建立一張全空的圖形。參數x_size、y_size為圖形的尺寸,單位 
為像素(pixel)。

如果要從已經存在的圖片中取出圖片檔案程式碼,可以用imagecreatefromgif()、 
imagecreatefromjpeg()或imagecreatefrompng(),例如函數imagecreatefromgif()就是從一個GIFcomm
格式的圖片檔案中所對應的圖片來源程式碼,其標準語法如下: 
語法:int imagecreatefromgif(string filename); 
返回值:整數 
函數種類:圖形處理 
內容說明:本函數用來取出一張GIF格式圖形,通常作為背景或基本的畫布樣本使 
用。參數filename可以是本地端的文件,也可以是網路的URL位址。傳回值為GIF的檔案 
程式碼,可供其他函數使用。
在將來源位圖縮小後拷貝到目標位圖中時,用到了imagecopyresized()函數,此函數可以 
複製新圖並調整大小,其標準語法如下: 
語法:int imagecopyresized(int dst_im,int src_im ,int dstX,int dstY,int srcX,int srcY, 
int dstW,int dstH,int srcW,int srcH); 
回傳值:整數 
類型:圖形處理 

傳回值:整數 
種類:圖形處理並重新調整圖片的大小尺寸。參數那是目的在前,來 
源在後。參數ddst_im及src_im為圖片的handle。參數dstX、dstY、srcX、srcY分別為目的 
及來源的座標。參數dstW、dstH、srcW、srcH分別為來源及目的的寬及高,若欲調整新圖 
的尺寸就在這裡配置。
最後在輸出影像時所使用的imagegif()函數的標準語法如下: 
語法:int imagegif(int im,string [filename]); 
回問值:整數 
函數種類:圖形處理 
內容說明:本回傳值函數用來建立一張GIF格式圖形。參數im為使用ImageCreate()所建立 
的圖片代碼,參數filename可省略,若無本參數filename,則會將圖片直接送到瀏覽器端, 
記得在送出圖片之前要先送出使用Content-type: image/gif的標頭字串(header)到瀏覽器 
端,以順利傳送圖片。若要使用透明背景的GIF圖,也就是GIF89a的格式,需要先使用 
ImageColorTransparent()來配置透明背景。本函數所產生的GIF圖,由於有版權的問題,因此 
在商業上的使用還要多加考慮。

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