PHP利用GD庫處理圖片方法實現


這里寫的是完成每個功能的函數,可以復制單個函數直接使用,這里的每個函數都是另外一篇PHP常用類------圖片處理類Image當中的方法進行細化,可以參考一下

廢話不多說,直接付代碼吧!

添加水印(文字和圖片)

<?php 
/**
 * [創建圖片文字水印]
 * @param  [string] $imagename [需要添加水印的值]
 * @param  [string] $string    [圖片上添加的文字]
 * @param  [string] $locate    [水印位置,center,left_buttom,right_buttom三選一]
 * @return [null]            [description]
 */
function create_words_watermark($imagename,$string,$locate){
	list($width,$height,$type)=getimagesize($imagename);
	$types=array(1 => "GIF",2 => "JPEG",3 => "PNG",
		4 => "SWF",5 => "PSD",6 => "BMP",
		7 => "TIFF",8 => "TIFF",9 => "JPC",
		10 => "JP2",11 => "JPX",12 => "JB2",
		13 => "SWC",14 => "IFF",15 => "WBMP",16 => "XBM");
	$type=strtolower($types[$type]);
	$create="imagecreatefrom".$type;
	$img=$create($imagename);

	$string_color=imagecolorallocate($img,200, 200, 200);
	$fontsize=4;
	
	// 圖片的寬和高也可用下面兩個函數獲得
	// $width=imagesx($img);
	// $height=imagesy($img);
	
	switch($locate){
		case 'center':
			$x=($width-imagefontwidth($fontsize)*strlen($string))/2;
			$y=($height-imagefontheight($fontsize))/2;
			break;
		case 'left_buttom':
			$x=5;
			$y=($height-imagefontheight($fontsize)-3);
			break;
		case 'right_buttom':
			$x=($width-imagefontwidth($fontsize)*strlen($string)-3);
			$y=($height-imagefontheight($fontsize)-3);
 			break;
 		default:
 			die("未指定水印位置!");
 			break;
 	}
 	
	imagestring($img,$fontsize,$x,$y,$string,$string_color);
	imagestring($img,$fontsize,$x+1,$y+1,$string,$string_color);

	$save="image".$type;
	//保存
	//$save($img,"new_".$imagename);
	
	//顯示
	header("content-type:image/".$type);
	$save($img);
	imagedestroy($img);
}

// create_words_watermark("test.png","hello world","right_buttom");

/**
 * [create_pic_watermark 添加圖片水印]
 * @param  [string] $dest_image [需要添加圖片水印的圖片名]
 * @param  [string] $watermark  [水印圖片名]
 * @param  [string] $locate     [水印位置,center,left_buttom,right_buttom三選一]
 * @return [type]             [description]
 */
function create_pic_watermark($dest_image,$watermark,$locate){
	list($dwidth,$dheight,$dtype)=getimagesize($dest_image);
	list($wwidth,$wheight,$wtype)=getimagesize($watermark);

	$types=array(1 => "GIF",2 => "JPEG",3 => "PNG",
		4 => "SWF",5 => "PSD",6 => "BMP",
		7 => "TIFF",8 => "TIFF",9 => "JPC",
		10 => "JP2",11 => "JPX",12 => "JB2",
		13 => "SWC",14 => "IFF",15 => "WBMP",16 => "XBM");

	$dtype=strtolower($types[$dtype]);//原圖類型
	$wtype=strtolower($types[$wtype]);//水印圖片類型

	$created="imagecreatefrom".$dtype;
	$createw="imagecreatefrom".$wtype;
	
	$imgd=$created($dest_image);
	$imgw=$createw($watermark);

	switch($locate){
		case 'center':
			$x=($dwidth-$wwidth)/2;
			$y=($dheight-$wheight)/2;
			break;
		case 'left_buttom':
			$x=1;
			$y=($dheight-$wheight-2);
			break;
		case 'right_buttom':
			$x=($dwidth-$wwidth-1);
			$y=($dheight-$wheight-2);
 			break;
 		default:
 			die("未指定水印位置!");
 			break;
 	}

 	imagecopy($imgd,$imgw,$x,$y,0,0, $wwidth,$wheight);

 	$save="image".$dtype;

 	//顯示
 	header("content-type:image/".$dtype);
 	$save($imgd);

 	imagedestroy($imgw);
 	imagedestroy($imgd);
}

create_pic_watermark("ganlixin.jpg","test.png","left_buttom");
?>

 

剪切圖片

<?php 
/**
 * [cut_image]					從原圖中剪切一部分
 * @param  [string] $old_imagename [需要剪切的圖片名]
 * @param  [int] $start_width   [從原圖片寬為的$start_width開始剪切]
 * @param  [int] $start_height  [從原圖片高為的$start_height開始剪切]
 * @param  [int] $new_width     [從原圖片中剪切$new_width的寬度]
 * @param  [int] $new_height    [從原圖片中剪切$new_height的高度]
 * @return [null]                [null]
 */
function cut_image($old_imagename,$start_width,$start_height,$new_width,$new_height){
	list($old_width,$old_height,$type)=getimagesize($old_imagename);
	$types=array(1 => "GIF",2 => "JPEG",3 => "PNG",
		4 => "SWF",5 => "PSD",6 => "BMP",
		7 => "TIFF",8 => "TIFF",9 => "JPC",
		10 => "JP2",11 => "JPX",12 => "JB2",
		13 => "SWC",14 => "IFF",15 => "WBMP",16 => "XBM");
	$type=strtolower($types[$type]);
	$create="imagecreatefrom".$type;

	$old_img=$create($old_imagename);
	$new_img=imagecreatetruecolor($new_width, $new_height);

	imagecopyresampled($new_img,$old_img,0,0,$start_width,$start_height,$new_width,$new_height,$new_width,$new_height);
	$save="image".$type;

	//保存
	//$save($new_img,"new_".$old_imagename);
	
	//顯示
	header("content-type:image/".$type);
	$save($new_img);

	//銷毀
	imagedestroy($old_img);
	imagedestroy($new_img);
}

cut_image("ganlixin.jpg",0,0,200,200);
?>

  

翻轉圖片

<?php 
/**
 * [rotate_image 圖片旋轉]
 * @param  [string] $imagename [要進行旋轉的圖片名]
 * @param  [string] $angle     [旋轉的角度,逆時針為正]
 * @return [null]            [description]
 */
function rotate_image($imagename,$angle){
	list($width,$height,$type)=getimagesize($imagename);
	$types=array(1 => "GIF",2 => "JPEG",3 => "PNG",
		4 => "SWF",5 => "PSD",6 => "BMP",
		7 => "TIFF",8 => "TIFF",9 => "JPC",
		10 => "JP2",11 => "JPX",12 => "JB2",
		13 => "SWC",14 => "IFF",15 => "WBMP",16 => "XBM");
	$type=$types[$type];

	$create="imagecreatefrom".$type;
	$img=$create($imagename);
	$new_img=imagerotate($img,$angle,0);
	$save="image".$type;

	//顯示
	header("content-type:image/".$type);
	$save($new_img);

	// 保存
	// $save($new_img,"new_".$imagename);

	imagedestroy($img);
	imagedestroy($new_img);
} 

rotate_image("ganlixin.jpg",-90);

?>

  

翻轉圖片

<?php 
/**
 * [overturn_image 翻轉圖片]
 * @param  [string] $imagename [要反轉的圖片名]
 * @param  [char] $method    [按x軸或y軸翻轉,只有x,y選項]
 * @return [type]            [description]
 */
function overturn_image($imagename,$method){
	$method=strtolower($method);
	list($width,$height,$type)=getimagesize($imagename);
	$types=array(1 => "GIF",2 => "JPEG",3 => "PNG",
		4 => "SWF",5 => "PSD",6 => "BMP",
		7 => "TIFF",8 => "TIFF",9 => "JPC",
		10 => "JP2",11 => "JPX",12 => "JB2",
		13 => "SWC",14 => "IFF",15 => "WBMP",16 => "XBM");
	$type=$types[$type];

	$create="imagecreatefrom".$type;
	$img=$create($imagename);//源圖片
	$new_img=imagecreatetruecolor($width,$height);//翻轉之后的圖片

	if($method=='y'){
		for($i=0;$i<$width;$i++){
			imagecopy($new_img,$img,$width-$i-1,0,$i,0,1,$height);
		}
	} else if($method=='x'){
		for($i=0;$i<$height;$i++){
			imagecopy($new_img,$img,0,$height-$i-1,0,$i,$width,1);
		}
	}
	$save="image".$type;

	//顯示
	header("content-type:image/".$type);
	$save($new_img);

	// 保存
	// $save($new_img,"new_".$imagename);

	imagedestroy($img);
	imagedestroy($new_img);
}
overturn_image("ganlixin.jpg","y");
?>

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM