PHP画图基础

Title:    PHP画图基础

Author:  MoreWindows

Blog:     http://blog.csdn.net/MoreWindows

KeyWord:    PHP绘图 画点、线、弧线 绘制和填充区域 图片特效 彩色圣诞节大雪花图

 

本篇对PHP常用的绘图函数进行总结。内容有建立图像,为图像分配颜色,画点,画线,画弧线,绘制和填充区域,输出字符和汉字及一些常见的图片特效如反色和浮雕。此外还给出一些有趣的实例,如绘制彩色的圣诞节大雪花图。


一.新建图像

           resource imagecreate( int $x_size , int $y_size )

imagecreate()返回一个图像标识符,代表了一幅大小为 x_sizey_size 的空白图像。

          resource imagecreatetruecolor( int $x_size , int $y_size )

imagecreatetruecolor() 返回一个图像标识符,代表了一幅大小为 x_sizey_size 的黑色图像。PHP手册上推荐尽量使用imagecreatetruecolor()函数。

还有根据.gif、.png、.jpg等文件来创建图像的函数。

         resource imagecreatefromgif( string $filename )

         resource imagecreatefrompng ( string $filename )

         resource imagecreatefromjpeg( string $filename )


二.为图像分配颜色

          int imagecolorallocate ( resource $image , int $red , int $green , int $blue )

imagecolorallocate() 返回一个标识符,代表了由给定的 RGB 成分组成的颜色。redgreenblue 分别是所需要的颜色的红,绿,蓝成分。这些参数是 0 到 255 的整数或者十六进制的 0x00 到 0xFF。第一次图像调用 imagecolorallocate()表示设置图像背景色。

           int imagecolorallocatealpha( resource $image , int $red , int $green , int $blue , int $alpha )

imagecolorallocatealpha() 的行为和imagecolorallocate()相同,但多了一个额外的透明度参数alpha,其值从 01270表示完全不透明,127 表示完全透明。

 

三.画点

           bool imagesetpixel( resource $image , int $x , int $y , int $color )

注:图像左上角为(0,0)

 

四.画线

          bool imageline( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )

从(x1, y1)到(x2,y2)。线的风格可以由bool imagesetstyle( resource $image , array $style )来控制。宽度由bool imagesetthickness ( resource $image , int $thickness )控制,注意这个宽度在画矩形、弧线时也生效。

 

五.画椭圆弧

         bool imagearc(resource $image , int $cx , int $cy , int $w , int $h , int $s , int $e , int $color)

imagearc()cxcy(图像左上角为 0, 0)为中心在 image 所代表的图像中画一个椭圆弧。wh 分别指定了椭圆的宽度和高度,起始和结束点以 se参数以角度指定。0度位于三点钟位置,以顺时针方向绘画。如:

$black = imagecolorallocate($img, 0, 0, 0);

imagearc($img, 100, 100, 150, 180, 0, 90,$black);

将在(100,100)处画一段宽150高180的从0到90度的弧,如下图所示(作为参照,右边是全图):


 

六.绘制区域

          矩形

          bool imagerectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $col )

         椭圆

         bool imageellipse ( resource $image , int $cx , int $cy , int $w , int $h , int $color )

         多边形

         bool imagepolygon ( resource $image , array $points , int $num_points , int $color )

 

七.填充区域

       填充区域

       bool imagefill( resource $image , int $x , int $y , int $color )

imagefill()在image图像的(x,y)处用 color颜色执行区域填充(即与 (x, y) 点颜色相同且相邻的点都会被填充)。如以下代码片段会先画出蓝色的椭圆,然后用红色填充椭圆内部。

$blue_color = imagecolorallocate($img, 0, 0, 255);             
$red_color = imagecolorallocate($img, 255, 0, 0);
imageellipse($img, 300, 200, 300, 200, $blue_color);
imagefill($img, 300, 200, $red_color);
运行效果如下:


       画一椭圆并填充

       bool imagefilledellipse( resource $image , int $cx , int $cy , int $w , int $h , int $color )

这种画法椭圆是没有边框的,当然也可以如下实现:

$lucency_color = imagecolorallocatealpha($img, 0, 0, 0, 126);//127为全透明 0全不透明
$red_color = imagecolorallocate($img, 255, 0, 0);
imageellipse($img, 300, 200, 300, 200, $lucency_color);
imagefill($img, 300, 200, $red_color);
//imagefilledellipse($img, 300, 200, 300, 200, $red_color);

        画一矩形并填充

        bool imagefilledrectangle (resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )

类似于画一椭圆并填充。

 

         画一椭圆弧且填充

         bool imagefilledarc( resource $image , int $cx , int $cy , int $w , int $h , int $s , int $e , int $color , int $style )

对最后一个参数说明下,有4种值:

IMG_ARC_PIE    产生圆形边界(如果两个都用,IMG_ARC_CHORD生效)。

IMG_ARC_CHORD  用直线连接了起始和结束点。

IMG_ARC_NOFILL画弧,只有轮廓,不填充。

IMG_ARC_EDGED  指明用直线将起始和结束点与中心点相连

看下实际的效果(圆弧角度从0到210度):


下一篇将用这个函数来画饼状图。


八.字符

       水平地画一个字符

       bool imagechar(resource $image , int $font , int $x , int $y , string $c , int $color)

      垂直地画一个字符

      bool imagecharup(resource $image , int $font , int $x , int $y , string $c , int $color)

      水平地画一行字符串

      bool imagestring(resource $image , int $font , int $x , int $y , string $s , int $col)

      垂直地画一行字符串

       bool imagestringup(resource $image , int $font , int $x , int $y , string $s , int $col)

$font参数要注意下,要么使用内置的字体(从1到5),要么用int imageloadfont ( string $file )加载字体后再设置。

可以用输出*来得到彩色的圣诞节雪花图,代码如下:

<?php
// by MoreWindows( http://blog.csdn.net/MoreWindows )
$imgWidth = 300;
$imgHeight = 200;
$img = imagecreate($imgWidth, $imgHeight);
imagecolorallocate($img, 255, 255, 255);//设置底色
$snowflake_size = 5; //可从1到5
//生成雪花 其实就是调用imagechar()输出*号
for ($i=1; $i<=400; $i++) 
    imagechar($img, $snowflake_size, mt_rand(0, $imgWidth),mt_rand(0, $imgHeight), "*", imagecolorallocate($img, mt_rand(200,255), mt_rand(200,255), mt_rand(200,255))); 
imagepng($img);
imagedestroy($img);
?>

运行效果如下:



九.文本

       array imagettftext(resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text )

解释几个参数:

第二参数$size为字体大小。

第三参数$angle为文本旋转角度,0度为从左向右读的文本,更高数值表示逆时针旋转。例如 90 度表示从下向上读的文本。

第七个参数$fontfile表示字体文件,如"c:\\WINDOWS\\Fonts\\simhei.ttf"。

注意!使用这个函数应当配合imagecreatetruecolor(),而不是imagecreate()。

下面用这个imagettftext()来代替上面的imagechar从而生成彩色的圣诞节大雪花图,代码如下:
<?php
// by MoreWindows( http://blog.csdn.net/MoreWindows )
$imgWidth = 600;
$imgHeight = 400;
$img = imagecreatetruecolor($imgWidth, $imgHeight);
imagefill($img, 0, 0, imagecolorallocate($img, 240, 240, 240));//设置底色
$snowflake_size = 30;
$font_file = "c:\\WINDOWS\\Fonts\\simhei.ttf"; 
//生成大雪花 其实就是调用imagettftext()输出*号
for ($i=1; $i<=400; $i++) 
{
	$font_color = imagecolorallocate($img, mt_rand(100,200), mt_rand(100,200), mt_rand(100,200));
	imagettftext($img, $snowflake_size, mt_rand(0, 180), mt_rand(0, $imgWidth),mt_rand(0, $imgHeight), $font_color, $font_file, "*"); 
}
//水印文字
$black_color = imagecolorallocate($img, 0, 0, 0);
imagettftext($img, 12, 0, $imgWidth - 200 , $imgHeight - 20, $black_color, $font_file, "大雪花图  by MoreWindows");
imagepng($img);
imagedestroy($img);
?>

运行效果如下:


 

十.图像特效

        bool imagefilter ( resource $src_im , int $filtertype [,int $arg1 [, int $arg2 [, int $arg3 ]]] )

这里提供了很多特效,如浮雕,反色(底片色),调节灰度、亮度,对比度,模糊化等等。这只展示几种常用的特效,更多的请访问http://www.php.net/manual/zh/function.imagefilter.php

原图:


将图处保存到D:\\1234.png,就可以执行下面的代码了。

IMG_FILTER_NEGATE:将图像中所有颜色反转(底片色)。


代码:

<?php
// by MoreWindows( http://blog.csdn.net/MoreWindows )
$img = imagecreatefrompng("D:\\1234.png");
imagefilter($img, IMG_FILTER_NEGATE);
imagepng($img);
imagedestroy($img);
?>

IMG_FILTER_EMBOSS:使图像浮雕化。


代码:

<?php
// by MoreWindows( http://blog.csdn.net/MoreWindows )
$img = imagecreatefrompng("D:\\1234.png");
imagefilter($img, IMG_FILTER_EMBOSS);
imagepng($img);
imagedestroy($img);
?>

本篇就介绍到此,下一篇《PHP 画图应用 验证码 柱状图》将用本篇介绍的函数来绘制验证码和柱状图。

 

 

转载请标明出处,原文地址:http://blog.csdn.net/morewindows/article/details/7274870



  • 11
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: Python中的turtle模块是一个绘图工具,可以用来绘制各种图形,包括线条、圆形、矩形等等。以下是turtle模块的基础操作: 1. 导入turtle模块 ```python import turtle ``` 2. 创建一个画布 ```python turtle.setup(width, height, startx, starty) ``` 3. 创建一个画笔 ```python pen = turtle.Turtle() ``` 4. 移动画笔 ```python pen.forward(distance) # 向前移动 pen.backward(distance) # 向后移动 pen.right(angle) # 向右旋转 pen.left(angle) # 向左旋转 ``` 5. 改变画笔的属性 ```python pen.color(color) # 改变画笔颜色 pen.pensize(size) # 改变画笔大小 pen.speed(speed) # 改变画笔速度 ``` 6. 绘制图形 ```python pen.circle(radius) # 绘制圆形 pen.dot(size) # 绘制点 pen.stamp() # 绘制当前画笔的形状 pen.penup() # 抬起画笔 pen.pendown() # 放下画笔 ``` 以上是turtle模块的基础操作,可以用来绘制各种图形。 ### 回答2: turtle作为Python的标准库之一,是一个简单易用的画图工具。这个库模拟海龟绘图系统,绘制线条和形状,支持全面的图形用户界面(GUI)交互。下面就是Python画图turtle基础操作的详细步骤: 1.导入turtle模块 在Python中使用turtle库,首先要导入turtle模块: import turtle 2.创建画布 使用turtle的Screen方法创建出一个画布,即一个可视化窗口: screen = turtle.Screen() 3.创建画笔 turtle.Turtle()可以创建一个新的画笔: pen = turtle.Turtle() 这条语句会创建一个默认的画笔。 4.绘制基本图形 主要的画图方法如下: pen.forward(distance) #向画布的正方向移动指定距离 pen.backward(distance) #向画布的相反方向移动指定距离 pen.right(degree) #向右旋转指定角度 pen.left(degree) #向左旋转指定角度 pen.goto(x, y) #移动画笔到给定的坐标 pen.color(color) #修改画笔的颜色 pen.width(width) #修改画笔的宽度 pen.circle(radius) #画出一个半径为radius的圆 同时,使用pen.pendown()和pen.penup()命令可以控制画笔的起伏。pen.pendown()使画笔落下时,它开始绘制;而pen.penup()使其离开画布,以便移动而不绘制任何东西。 5.隐藏画笔 隐藏turtle画笔的默认箭头,可以使用: turtle.hideturtle() 程序将在窗口中使用透明色彩绘制图像。 6.改变背景和画笔颜色 使用下面的语句中的任何一个,可以更改绘图窗口和线条颜色: turtle.bgcolor("black") pen.color("blue") 这是turtle库里两个常用的函数来控制颜色以使绘图窗口看起来更加美观。 例如,给出下面的代码: import turtle pen = turtle.Turtle() pen.forward(100) pen.right(90) pen.forward(100) turtle.mainloop() 这个程序会创建一个小窗口,通过使用pen.forward()和pen.right()来绘制一条线段,运行后会画出一个直角三角形。 综上所述,turtle库是Python的一个重要作品。使用turtle,实现图形的绘制,可以让大家快乐学习和清晰明了地理解数学的字谜。同样的,还可以使用turtle绘制各种各样的有趣的图片。如果想要更深入地了解Python画图turtle基础操作,可以进一步探索更多高级用法。 ### 回答3: Python中的turtle库是一个非常有趣的图形化模块,它可以让我们写出非常漂亮的图形,并且非常容易上手。这个库是采用海龟绘图的方式来实现的,即我们可以通过代码来控制一个小海龟来绘制图形。下面是一些turtle基础操作的介绍。 一、turtle的基本命令 在Python中,我们可以通过以下的代码来导入turtle库: import turtle 然后我们就可以开始一些基本的命令了。turtle库中有一些基本的命令,如下: turtle.forward(distance):向前移动一定距离(默认为像素)。 turtle.backward(distance):向后移动一定距离(默认为像素)。 turtle.right(angle):向右转动一定角度。 turtle.left(angle):向左转动一定角度。 turtle.penup():抬起画笔,即不绘制轨迹。 turtle.pendown():落下画笔,即绘制轨迹。 turtle.speed(speed):设置笔画的速度。 turtle.color(color):设置画笔的颜色。 turtle.pensize(size):设置画笔的宽度。 二、turtle的基本图形 turtle库可以绘制出很多种不同的图形,下面介绍一些常见的基本图形。 1. 线条 我们可以使用turtle库来绘制出任意形状的曲线和直线,只需要使用turtle.forward()函数即可。例如,下面的代码可以画出一条直线: import turtle t = turtle.Turtle() t.forward(100) 2. 圆形 我们可以使用turtle库来绘制出任意大小的圆形,只需要使用turtle.circle()函数即可。例如,下面的代码可以画出一个半径为50的圆形: import turtle t = turtle.Turtle() t.circle(50) 3. 正方形 我们可以使用turtle库来绘制出正方形,只需要使用turtle.forward()和turtle.right()函数即可。例如,下面的代码可以画出一个边长为100的正方形: import turtle t = turtle.Turtle() for i in range(4): t.forward(100) t.right(90) 4. 三角形 我们可以使用turtle库来绘制出三角形,只需要使用turtle.forward()和turtle.right()函数即可。例如,下面的代码可以画出一个边长为100的等边三角形: import turtle t = turtle.Turtle() for i in range(3): t.forward(100) t.right(120) 五、总结 Python中的turtle库非常有趣,可以让我们创造出非常美丽的图形。通过本文的介绍,我们可以学习到turtle库的一些基本命令和基本图形。这些都是Python绘图的基础,希望大家可以学习好它们,为以后更加丰富的图形编写打下基础

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值