创建图像基本步骤
创建图像
所有的绘图设计都需要在一个图像上完成,以后的操作都将就与这个图像
imagecreatetruecolor(宽,高)
:新建一个真彩图像
imagecreatefromjpeg()
:打开服务器或网络文件中已经存在的GIF、JPEG、PNG、WBMP格式图像
imagecreatefromjpeg()
imagecreatefrompng()
imagecreatefromgif()
imagecreatefromwbmp()
创建或者打开失败的时候会返回空字符串,并且输出一条错误信息
imagesx()
:取得图像宽度imagesy()
:取得图像高度imagesize()
:取得图像大小绘制图像
图像创建完成以后,就可以通过这个图像资源,使用各种画像函数设置图像的颜色、填充画布、画点、线段、各种几何图形,以及向图像的添加文本等
imagecolorallocate(图像对象, red, green, blue)
:为一幅图像分配颜色
imagefill(图像对象, x坐标, y坐标, 分配颜色对象)
:为一幅图像分配颜色
imagesetpixel()
:画一个单一像素
imageline()
:画一条线段
imagerectangle()
画一个矩形
imagestring()
:水平画一行字符串
imagettftext()
:用TrueType字体向图像写入文本
imagettfbbox()
:计算TrueType文字所占区域
imagecopy()
:拷贝图像的一部分
imagecopymerge()
:拷贝并合并图像的一部分
imagecopyresampled()
:重采样拷贝部分图像并调整大小
输出图像
完成整个图像的绘制之后,需要将图像以某种格式保存到服务器的文件中,或者将图像直接输出到浏览器上显示给用户。但在图像输出之前,一定要使用header()函数发送Content-type通知浏览器,这次发送的是图片不是文本
header(“Content-type:image/jpeg”)
:通知浏览器,这次发送的是图片不是文本;在该函数之前,不能输出任何内容imagejpeg(图像对象, url)
:以JPEG格式将图像输出到浏览器或文件;添加url路径可以保存到服务器释放资源
imagedestroy(图像对象)
:销毁图像,释放资源创建图像的基本步骤
//通知浏览器,这次发送的是图片不是文本
// header("Content-type:image/jpeg"); //默认情况是header("Content-type:text/html");
// -----------创建图像--------------------------------
$img = imagecreatetruecolor(200, 200); //新建一个宽高200px的真彩图像
// -----------绘制图像--------------------------------
$color_red = imagecolorallocate($img, 255, 0, 0); //分配颜色
$color_green = imagecolorallocate($img, 0, 255, 0); //分配颜色
$color_blue = imagecolorallocate($img, 0, 0, 255); //分配颜色
// ---------------------------------------------------
imagefill($img, 0, 0, $color_green); //区域填充
// -----------输出图像--------------------------------
// imagejpeg($img); //以JPEG格式将图像输出到浏览器或文件
imagejpeg($img, 'img/kuse.jpeg'); //以JPEG格式将图像保存到服务器
// -----------输出图像--------------------------------
imagedestroy($img); //销毁图像
?>
验证码应用
//通知浏览器,这次发送的是图片不是文本
header("Content-type:image/jpeg"); //默认情况是header("Content-type:text/html");
$element = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u','v', 'w', 'x', 'y', 'z');
$string = '';
for($i = 0; $i < 5; $i++){
$string .= $element[rand(0, count($element)-1)];
}
// -----------创建图像--------------------------------
$width = 120;
$height = 40;
$img = imagecreatetruecolor($width, $height); //新建一个宽高200px的真彩图像
// -----------绘制图像--------------------------------
// $color_bg = imagecolorallocate($img, 255, 200, 200); //分配颜色
$color_bg = imagecolorallocate($img, rand(150, 255), rand(150, 255), rand(150, 255)); //随机分配颜色
$color_border = imagecolorallocate($img, 0, 0, 0); //边框颜色
$color_pixel = imagecolorallocate($img, rand(100, 200), rand(100, 200), rand(100, 200)); //像素点颜色
$color_string = imagecolorallocate($img, rand(10, 100), rand(10, 100), rand(10, 100)); //像素点颜色
// ---------------------------------------------------
imagefill($img, 0, 0, $color_bg); //区域填充
imagerectangle($img, 0, 0, $width-1, $height-1, $color_border); //画一个矩形
for($i = 0; $i < 100; $i++){
imagesetpixel($img, rand(1, $width-1), rand(1, $height-1), $color_pixel); //画一个像素点
}
for($i = 0; $i < 3; $i++){
imageline($img, rand(0, $width/2), rand(0, $height/2), rand($width/2, $width-1), rand($height/2, $height-1), $color_pixel); //画一条线
}
// imagestring($img, 5, 10, 10, "abcd", $color_string);//水平写一行字符串
imagettftext($img, 25, rand(-5, 5), rand(5, 15), rand(30,$height-10), $color_string, 'D:/phpstudy_pro/WWW/font/kaharsa.otf', $string); //用指定字体写入字符串
// -----------输出图像--------------------------------
imagejpeg($img); //以JPEG格式将图像输出到浏览器或文件
// imagejpeg($img, 'img/kuse.jpeg'); //以JPEG格式将图像保存到服务器
// -----------输出图像--------------------------------
imagedestroy($img); //销毁图像
?>
图片水印
//通知浏览器,这次发送的是图片不是文本
header("Content-type:image/jpeg"); //默认情况是header("Content-type:text/html");
// -----------创建图像--------------------------------
$img = imagecreatefrompng('img/timg.png');//目标图像资源
$waterMark = imagecreatefrompng('img/happy.png');//水印图像资源
// -----------绘制图像--------------------------------
$color = imagecolorallocate($img, 255, 255, 255);
$width = imagesx($img); //获取图片宽高
$heigh = imagesy($img);
$waterMarkWidth = imagesx($waterMark);
$waterMarkHeight = imagesy($waterMark);
// var_dump($width);
// var_dump($heigh);
// ------------------------文字水印开始-------------------
$boxSize = imagettfbbox(50, 0, 'D:\phpstudy_pro\WWW\font\HongLeiBanShuJianTi-2.ttf', '美女写真');
// var_dump($boxSize);
$strWidth = $boxSize[2]-$boxSize[0];
// var_dump($strWidth);
imagettftext($img, 50, 0, $width - $strWidth-10, $heigh-10, $color, 'D:\phpstudy_pro\WWW\font\HongLeiBanShuJianTi-2.ttf', '美女写真');
// ------------------------文字水印结束-------------------
// ------------------------图片水印开始-------------------
imagecopy($img, $waterMark, 300, 100, 0, 0, $waterMarkWidth, $waterMarkHeight);
imagecopymerge($img, $waterMark, 300, 300, 0, 0, $waterMarkWidth, $waterMarkHeight, 10);
/*
参数说明:
$img:目标资源
$waterMark:水印图像资源
300:拷贝到目标图像的X轴位置
100:拷贝到目标图像的Y轴位置
0:从水印图像的X坐标为0的位置开始拷贝
0:从水印图像的Y坐标为0的位置开始拷贝
$waterMarkWidth:拷贝水印图像的宽度
$waterMarkHeight:拷贝水印图像的高度
0:表示透明度,数值越小,越透明,最大值100表示不透明
*/
// ------------------------图片水印结束-------------------
// -----------输出图像--------------------------------
imagepng($img); //以png格式将图像输出到浏览器或文件
// imagepng($img, 'img/kuse.png'); //以png格式将图像保存到服务器
// -----------输出图像--------------------------------
imagedestroy($img); //销毁图像
?>
裁剪与缩放
//通知浏览器,这次发送的是图片不是文本
header("Content-type:image/jpeg"); //默认情况是header("Content-type:text/html");
// -----------创建图像--------------------------------
$img = imagecreatefrompng('img/timg.png');//目标图像资源
$imgWidth = imagesx($img);
$imgHeight = imagesy($img);
$width = 200;
$height = $width / ($imgWidth/$imgHeight);
$img2 = imagecreatetruecolor($width, $height);
// -----------绘制图像--------------------------------
// $color = imagecolorallocate($img2, 255, 0, 0);
// imagefill($img2, 0, 0, $color); //区域填充
// imagecopyresampled($img2, $img, 150, 100, 300, 200, 200, 100, 200, 100);//裁剪
imagecopyresampled($img2, $img, 0, 0, 0, 0, $width, $height, $imgWidth, $imgHeight);//等比例缩放,容量改变,图片大小也改变
// -----------输出图像--------------------------------
if(imagepng($img2)){
imagepng($img2, 'img/kuse1.png');//以png格式将图像输出到浏览器或文件
}
// -----------输出图像--------------------------------
imagedestroy($img); //销毁图像
imagedestroy($img2); //销毁图像
?>