PHP基础 GD2图像处理 第十七天

2012-11-08 16:03:18 0  category: 第一阶段PHP

gd2我们能做什么?




图像处理:

第一:创建一个图像资源 【创建一张画布或者是打开一张现有图片】

第二:分配颜色

第三:使用图像处理函数来操作这个图片资源。【画线,画点,画饼,画矩】

第四:输出header头【告诉浏览器,这是一张图片,可选】

第五:保存图片或者输出图片

第六:销毁图像资源




输出图像的时候:

Imagepng();

Imagejpeg();

Imagegif();

Imagwbmp();





如何写字:

Imagechar

Imagecharup

Imagestring

Imagestringup  

Imagettftext




GD.php

<?php 

//imagecreate(); 它的画布颜色较少 256种
//
//imagecreatetruecolor(); 它的画布颜色较多 65536


$img=imagecreatetruecolor(500,500);


$red=imagecolorallocate($img,255,0,0);

$green=imagecolorallocate($img,0,255,0);

$blue=imagecolorallocate($img,0,0,255);

$pink=imagecolorallocate($img,255,102,204);



imagefilledrectangle($img,0,0,500,500,$pink);


imageline($img,0,0,500,500,$green);

imageline($img,500,0,0,500,$green);


imagefilledellipse($img,250,250,200,200,$red);

imagefilledrectangle($img,180,180,320,320,$blue);
//imagecharup($img,5,300,400,'',$green);
//imagestringup($img,5,300,400,'我愿变成童话里',$red);


imagettftext($img,50,0,0,200,$green,'STXINWEI.TTF','拼命赚钱,美貌如花');


header('Content-type:image/jpeg');

imagejpeg($img,'bcdc.jpeg');

imagedestroy($img);


?>



imgjoin.php

<?php  
//将两张图片合并到一起
//imagecreatefromjpeg
//imagecreatefrompng
//imagecreatefromwbmp
//imagecreatefromgif
//

$src=imagecreatefromjpeg('zxy.jpg');

$dst=imagecreatefromjpeg('yz.jpg');

//imagecopy($dst,$src,440,512,215,25,376,446);

//imagecopymerge($dst,$src,1130,466,267,174,238,292,20);

//$newImg=imagecreatetruecolor(238,292);

//imagecopymerge($newImg,$src,0,0,267,174,238,292,100);

imagecopyresampled($dst,$src,700,704,267,187,100,100,230,281);

imagepng($dst);

?>



shuiyin.php




<?php 

//$y 原图
//$w 水印图
//$tm=透明度
//$prefix 另存为文件时的前缀名

water('yz.jpg','logo.gif',1,100,'wa1_');
water('yz.jpg','logo.gif',2,100,'wa2_');
water('yz.jpg','logo.gif',3,100,'wa3_');
water('yz.jpg','logo.gif',4,100,'wa4_');
water('yz.jpg','logo.gif',5,100,'wa5_');
water('yz.jpg','logo.gif',6,100,'wa6_');
water('yz.jpg','logo.gif',7,100,'wa7_');
water('yz.jpg','logo.gif',8,100,'wa8_');
water('yz.jpg','logo.gif',9,100,'wa9_');
water('yz.jpg','logo.gif',0,100,'wa0_');




function water($y,$w,$pos=0,$tm=100,$prefix='wa_'){

$yInfo=getinfo($y);
$wInfo=getinfo($w);

if(!$yRes=wnOpen($y,$yInfo['type'])){
exit('文件打开失败');
}
if(!$wRes=wnOpen($w,$wInfo['type'])){

exit('水印文件打开失败');
}


switch($pos){
case 1:
$x=0;
$y=0;
break;
case 2:
$x=ceil(($yInfo['width']-$wInfo['width'])/2);
$y=0;
break;
case 3:
$x=$yInfo['width']-$wInfo['width'];
$y=0;
break;
case 4:
$x=0;
$y=floor(($yInfo['height']-$wInfo['height'])/2);
break;
case 5:
$x=ceil(($yInfo['width']-$wInfo['width'])/2);
$y=floor(($yInfo['height']-$wInfo['height'])/2);
break;
case 6:
$x=$yInfo['width']-$wInfo['width'];
$y=floor(($yInfo['height']-$wInfo['height'])/2);
break;
case 7:
$x=0;
$y=$yInfo['height']-$wInfo['height'];
break;
case 8:
$x=ceil(($yInfo['width']-$wInfo['width'])/2);
$y=$yInfo['height']-$wInfo['height'];
break;
case 9:
$x=$yInfo['width']-$wInfo['width'];
$y=$yInfo['height']-$wInfo['height'];
break;
case 0:
default:

$x=mt_rand(0,$yInfo['width']-$wInfo['width']);
$y=mt_rand(0,$yInfo['height']-$wInfo['height']);
break;
}

imagecopymerge($yRes,$wRes,$x,$y,0,0,$wInfo['width'],$wInfo['height'],$tm);


wnSave($yRes,$yInfo,$prefix);

imagedestroy($yRes);
imagedestroy($wRes);


}

function wnSave($res,$info,$prefix){

$newName=$prefix.$info['name'];

switch($info['type']){
case 'image/png':
case 'image/x-png':
$res=imagepng($res,$newName);
break;
case 'image/jpeg':
case 'image/pjpeg':
case 'image/jpg':
$res=imagejpeg($res,$newName);
break;
case 'image/gif':
$res=imagegif($res,$newName);
break;
case 'image/wbmp':
$res=imagewbmp($res,$newName);
break;
default:
return false;

}
return $res;


}

function wnOpen($path,$type){

switch($type){
case 'image/png':
case 'image/x-png':
$res=imagecreatefrompng($path);
break;
case 'image/jpeg':
case 'image/pjpeg':
case 'image/jpg':
$res=imagecreatefromjpeg($path);
break;
case 'image/gif':
$res=imagecreatefromgif($path);
break;
case 'image/wbmp':
$res=imagecreatefromwbmp($path);
break;
default:
return false;

}
return $res;


}


function getInfo($path){
$data=getimagesize($path);

//info是我随意命名的一个数组变量
$info['width']=$data[0];
$info['height']=$data[1];
$info['type']=$data['mime'];
$info['name']=basename($path);

return $info;

}
?>



yzm.php



<?php 

//width=100
//height=60
//type 数字,字母,数字字母混合

yzm();

function yzm($width=100,$height=60,$type=3,$length=4){

$img=imagecreatetruecolor($width,$height);

imagefilledrectangle($img,0,0,$width,$height,qColor($img));


switch($type){
case 1:
$string=join('',array_rand(range(0,9),$length));
break;
case 2:
$string=join('',array_rand(array_flip(range('a','z')),$length));
break;

case 3:
default:
for($i=0;$i<$length;$i++){
$rand=mt_rand(0,2);
switch($rand){
case 0:
$as=mt_rand(48,57); //0-9
break;
case 1:
$as=mt_rand(65,90); //A-Z
break;
case 2:
$as=mt_rand(97,122);//a-z
break;
}
$string.=chr($as);
}
break;

}

//干扰元素
for($i=0;$i<50;$i++){

imagesetpixel($img,mt_rand(0,$width),mt_rand(0,$height),sColor($img));

}
//随机直线,随机曲线

//写字
for($i=0;$i<$length;$i++){

$x=$i*floor($width/$length);

$y=mt_rand(0,$height-15);

imagechar($img,5,$x,$y,$string[$i],sColor($img));


}

header('content-type:image/png');

imagepng($img);

imagedestroy($img);

//记住啊,把字符串返回回去,以后存到session里面使用
return $string;
}

//浅色,供背景使用
//值越高,颜色越浅
function qColor($img){
return imagecolorallocate($img,mt_rand(130,255),mt_rand(130,255),mt_rand(130,255));

}

function sColor($img){
return imagecolorallocate($img,mt_rand(0,120),mt_rand(0,120),mt_rand(0,120));

}

?>