當前位置:才華齋>計算機>php語言>

php生成圖片縮圖的方法

php語言 閱讀(6.57K)

雖然在HTML中可以通過指定圖片的寬度和高度來隨意縮放圖片,但是這種方法不會減少圖片的畫素數目。圖形檔案的尺寸沒有改變,當然也不會加快圖片下載的速度了。當然也可以手動通過圖形軟體生成圖片的縮圖,但對於大量的圖片展示來說,這個工作量將十分巨大。為此微縮圖的自動生成程式就被設計出來了。

php生成圖片縮圖的方法

PHP中提供的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);

返回值:整數

函式種類:圖形處理

內容說明:本函式可複製新圖,並重新調整圖片的大小尺寸。引數都是目的在前,來源在後。引數dst im及src_im為圖片的handle。引數dstX、dstY、srcX、srcY分別為目的及來源的座標。引數dstW、dstH、srcW、srcH分別為來源及目的的寬及高,欲調整的新圖的尺寸就在這兒配置。

下面舉個例子來說明這個函式的用法,對應的程式如程式清單12—5所示。

程式清單12—5

複製程式碼 程式碼如下:

<?

// 本函式從原始檔取出影象,設定成指定大小,並輸出到目的檔案

// 原始檔格式:gif,jpg,png

// 目的檔案格式:gif

// $srcFile:原始檔

// $dstFile: 目標檔案

// $dstW:目標圖片寬度

// $dstH:目標檔案高度

function makethumb($srcFile,$dstFile,$dstW,$dstH)

{

$data = GetImageSize($srcFile,&$info);

switch ($data[2])

{

case 1:

$imgsrc = @ImageCreateFromGIF($srcFile);

break;

case 2:

$imgsrc = @ImageCreateFromJPEG($srcFile);

break;

case 3:

$imgsrc = @ImageCreateFromPNG($srcFile);

break;

}

$srcW = ImageSX($imgsrc);

$srcH = ImageSY($imgsrc);

$ni = ImageCreate($dstW,$dstH);

ImageCopyResized($ni,$imgsrc,0,0,0,0,$dstW,$dstH,$srcW,$srcH);

Imagegif($ni,$dstFile);

// 如果需要輸出到瀏覽器,那麼將上一句改為 ImageJpeg($ni);

// 如果需要其他格式的圖片,改動最後一句就可以了

}

?>

在這個例子中,首先通過getimagesize()函式獲得源圖片的情況,再用 imagecreatefromgif()、

imagecreatefromjpeg()或imagecreatefrompng()建立一個源點陣圖$imgsrc,然後用

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

複製程式碼 程式碼如下:

<?php

function getImageInfo($img) //$img為影象檔案絕對路徑

{

$img_info = getimagesize($img);

switch ($img_info[2])

{

case 1:

$imgtype = "GIF";

break;

case 2:

$imgtype = "JPG";

break;

case 3:

$imgtype = "PNG";

break;

}

$img_type = $imgtype."影象";

$img_size = ceil(filesize($img)/1000)."k"; //獲取檔案大小

$new_img_info = array (

"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];

print " format";

print $img_type;

print " size";

print $img_size;

print $new_img_info;

}

$img = "/www/htdocs/images/jf.gif";

getImageInfo($img);

?>

在程式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()就是從一個GIF

格式的圖片檔案中取出對應的圖片原始碼,其標準語法如下:

語法: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圖,由於有版權的問題,因此

在商業上的使用還要多加考慮。</p