文章出處

首先上封裝的函數代碼:

function thumb($filename,$destination=null,$dst_w=null,$dst_h=null,$isReservedSource=true,$scale=0.5){
	list($src_w,$src_h,$imagetype)=getimagesize($filename);  //得到原始圖像的長寬
	if(is_null($dst_w)||is_null($dst_h)){
		$dst_w=ceil($src_w*$scale);
		$dst_h=ceil($src_h*$scale);
	}
	$mime=image_type_to_mime_type($imagetype);  //echo $mime  會輸出image/jpg
	$createFun=str_replace("/", "createfrom", $mime);
           //$createFun使得image/jpg轉換為imagecreatefromjpg來生成圖像,這樣就可以使用$mime得到圖片的類型(如jpg,png)等
	  //不用每次都設定函數為imagecreatefromjpg,imagecreatefrompng等
      $outFun=str_replace("/", null, $mime);
	$src_image=$createFun($filename);
	$dst_image=imagecreatetruecolor($dst_w, $dst_h);
	imagecopyresampled($dst_image, $src_image, 0,0,0,0, $dst_w, $dst_h, $src_w, $src_h);
	if($destination&&!file_exists(dirname($destination))){
		mkdir(dirname($destination),0777,true);
	}
	$dstFilename=$destination==null?getUniName().".".getExt($filename):$destination;
	$outFun($dst_image,$dstFilename);
	imagedestroy($src_image);
	imagedestroy($dst_image);
	if(!$isReservedSource){
		unlink($filename);
	}
	return $dstFilename;
}

 

 該函數保存在 ../lib/image.func.php中

有因為getUniName()函數和getExt()函數在 ../lib/string.func.php中,所以

調用函數為:

require_once '../lib/string.func.php';
require_once '../lib/image.func.php';
$filename="des_big.jpg";
//thumb($filename);
thumb($filename,"image_50/".$filename,50,50,true); //調用../lib/image.func.php函數
thumb($filename,"image_220/".$filename,220,220,true);
thumb($filename,"image_350/".$filename,350,350,true);
thumb($filename,"image_800/".$filename,800,800,true);

 輸出結果是會在image_50,image_220,image_350,image_800的文件夾內分別產生50*50,220*220,350*350,800*800的圖片(以des_big.jpg為原型產生的)

 

/**
 * 生成唯一字符串
 * @return string
 */
function getUniName() {
	return md5(uniqid(microtime(ture),(ture)));   //這里得到一個可以變化的字母家數字,為了使上傳的文件即使相同,傳到服務器上也不相同 ;我覺得用date(y.m.d).time()這樣更好,又能得到時間,后面的time()時間戳還能變化
}

/**
 * 得到文件的擴展名
 * @param string $filename
 * @return string
 */
function getExt($filename){
	return strtolower(end(explode(".",$filename)));
}

 

以下介紹在函數中用到的函數:

imagecreatetruecolor — 新建一個真彩色圖像
說明
resource imagecreatetruecolor ( int $width , int $height )

 

imagecopyresampled — 重采樣拷貝部分圖像并調整大小
說明
bool imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )

imagecopyresampled() 將一幅圖像中的一塊正方形區域拷貝到另一個圖像中,平滑地插入像素值,因此,尤其是,減小了圖像的大小而仍然保持了極大的清晰度。 

 

file_exists() 函數檢查文件或目錄是否存在。

如果指定的文件或目錄存在則返回 true,否則返回 false。
語法

file_exists(path)

 

imagedestroy — 銷毀一圖像
說明
bool imagedestroy ( resource $image )

imagedestroy() 釋放與 image 關聯的內存。image 是由圖像創建函數返回的圖像標識符,

 

image_type_to_mime_type — 取得 getimagesize,exif_read_data,exif_thumbnail,exif_imagetype 所返回的圖像類型的 MIME 類型
MIME類型有如jpeg,png之類的

 

imagecreatefromjpeg — 由文件或 URL 創建一個新圖象。
說明
resource imagecreatefromjpeg ( string $filename )

imagecreatefromjpeg() 返回一圖像標識符,代表了從給定的文件名取得的圖像。 

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()