当前位置: 首页 > 科技观察

PHP图像处理库Grafika详细教程(四):图形绘制

时间:2023-03-13 12:43:00 科技观察

本文是上篇文章《PHP极其强大的图片处理库Grafika详细教程(3):图像属性处理》的续篇,是grafika教程的一部分。所有教程目录《1、图像基本处理》《2、图像特效处理模块》《3、图像属性处理》《4、图形绘制》不多说了,继续上例子,看基本说明,下载信息请看第一章。1.绘制贝塞尔曲线。绘制一条贝塞尔曲线,需要两个端点,一个端点,一个尾巴,和两个控制点,中间有两个。因此,必须至少有4个参数。为总共5个参数添加颜色。从右往右依次解释第一个(数组):表示起点,数组中第一个参数为x,第二个参数为y(下同)第二个(数组):控制点1(靠近起点),数组中的参数同上。第三个(数组):控制点2(靠近终点),数组中的参数同上。第四个(数组):终点,数组中的参数同上。第五个:颜色,可以用十六进制表示,例如:#ff0000绘制贝塞尔曲线有两种方法。但是大体步骤是一样的。1:打开图片;2、绘制;3、保存或输出1)、自己选择库,这个方法需要自己判断命名空间中的使用需要注意,比之前的\DrawingObject\CubicBezierasGdCubicBezier多了两个useGrafika\Grafika;useGrafika\Gd;useGrafika\Imagick\DrawingObject\CubicBezierasImagickCubicBezier;$editor=Grafika::createEditor();$editor->open($image,'yanying-smaller.jpg');$editorName=Grafika::detectAvailableEditor();if('Imagick'===$editorName){$drawingObject=newImagickCubicBezier(array(42,180),array(230,190),array(42,45),array(300,43),'#ff0000');}elseif('Gd'===$editorName){$drawingObject=newGdCubicBezier(array(42,180),array(230,190),array(42,45),array(300,43),'#ff0000');}$editor->draw($image,$drawingObject);$editor->save($image,'333/yanying-CubicBezier-1.jpg');2)、可以让grafika自己选择当前合适的类。这个方法简单很多,我们这次重新设置参数,把线条颜色改成黑色useGrafika\Grafika;$editor=Grafika::createEditor();$editor->open($image,'yanying-smaller.jpg');$drawingObject=Grafika::createDrawingObject('CubicBezier',array(42,230),array(230,237),array(42,45),array(230,43),'#000000');$editor->draw($image,$drawingObject);$editor->save($image,'333/yanying-CubicBezier-1.jpg');效果不错,以后做验证码就容易多了2.画椭圆画椭圆虽然看起来很难,但只要弄清楚椭圆的几个基本参数就可以了。此处,Ellipse参数用于绘制椭圆。接下来是一些用于绘制椭圆的形状和样式参数。我们从左到右描述椭圆的宽度:px是椭圆的单位高度:px是单位位置(数组):数组的第一个值是x(椭圆最左边的值从图像),第二个值为y(椭圆最上边到图形最上边的距离)borderwidth:单位px,设置为0表示无边框,默认为1px椭圆边框color:这个值需要使用颜色类,而不是简单的填一个颜色字符串的填充值ellipse:颜色同上。我们创建一个200*100的椭圆,距离左边50,距离顶部75,边框为1,边框颜色为黑色,填充为红色。useGrafika\Grafika;useGrafika\Color;$editor=Grafika::createEditor();$editor->open($image,'yanying-smaller.jpg');$drawingObject=Grafika::createDrawingObject('椭圆',200,100,数组(50,75),1,newColor('#000000'),newColor('#FF0000'));$editor->draw($image,$drawingObject);$editor->save($image,'333/yanying-椭圆.jpg');检查结果3.画一条直线画一条直线要容易一些。第一个参数是一个数组,表示起始坐标第二个参数是一个数组,表示结束坐标第三个参数是垂直方向的顺序,表示哪一行在上面,哪一行在下面。(GD库会忽略它,默认为1)第四个参数是color,如果不填充,默认为黑色。我们试着画几条线:useGrafika\Grafika;useGrafika\Color;$editor=Grafika::createEditor();$editor->open($image,'yanying-smaller.jpg');$editor->draw($image,Grafika::createDrawingObject('Line',array(0,0),array(200,200),1,newColor('#FF0000')));$editor->draw($image,Grafika::createDrawingObject('Line',array(0,200),array(200,0),1,newColor('#00FF00')));$editor->draw($image,Grafika::createDrawingObject('Line',array(0,0),array(200,100),1,newColor('#0000FF')));$editor->draw($image,Grafika::createDrawingObject('Line',array(0,100),array(200,100)));$editor->draw($image,Grafika::createDrawingObject('Line',array(100,0),array(100,200)));$editor->save($image,'333/Line.jpg');4.绘制多边形我们使用Polygon来绘制多边形,其中参数是最后一个参数是坐标点,是一个Array,其中数组中有3个数组,每个数组有两个值,第一个值代表x,第二个value代表y的形状就像array(array(0,0),array(50,0),array(0,50))第二个参数是边框宽度,0表示没有,从1开始,单位是px(defaultis1)第三个参数是bordercolor(默认是black)第四个参数是paddingcolor(默认是white)我们试着画几个图形useGrafika\Grafika;useGrafika\Color;$editor=Grafika::createEditor();$editor->open($image,'yanying-smaller.jpg');$editor->draw($image,Grafika::createDrawingObject('多边形',数组(array(0,0),array(50,0),array(0,50)),1));$editor->draw($image,Grafika::createDrawingObject('Polygon',array(array(200-1,0),array(150-1,0),array(200-1,50)),1));$editor->draw($image,Grafika::createDrawingObject('Polygon',array(array(100,0),array(140,50),array(100,100),array(60,50)),1,null,newColor('#FF0000')));$editor->save($image,'333/多边形.jpg');5、二次贝塞尔曲线,又称贝塞尔曲线或贝塞尔曲线,是一种应用于二维图形应用的数学曲线。它的形状是这样的。我们可以很方便的使用下面的代码创建useGrafika\Grafika;$editor=Grafika::createEditor();$editor->open($image,'yanying-smaller.jpg');$drawingObject=Grafika::createDrawingObject('QuadraticBezier',array(70,250),array(20,110),array(220,60),'#FF0000');$editor->draw($image,$drawingObject);$editor->save($image,'333/yanying-QuadraticBezier.jpg');其中参数如下第一个参数是起点坐标,是一个数组array(x,y)第二个参数是控制点坐标,也是一个数组,数组分别是x和三个参数是终点的坐标,也是一个数组。数组为x,y***第一个参数为颜色,默认为黑色。当然,你也可以使用另一种方式创建二次贝塞尔曲线useGrafika\Grafika;useGrafika\Gd\DrawingObject\QuadraticBezierasGdQuadraticBezier;useGrafika\Imagick\DrawingObject\QuadraticBezierasImagickQuadraticBezier;$editorName=Grafika::detectAvailableEditor();$editor=Grafika::createEditor();$editor->open($image,'yanying-smallerjpg');if('Imagick'===$editorName){$drawingObject=newImagickQuadraticBezier(array(70,250),array(20,110),array(220,60),'#FF0000');}elseif('Gd'===$editorName){$drawingObject=newGdQuadraticBezier(array(70,250),array(20,110),array(220,60),'#FF0000');}$editor->draw($image,$drawingObject);$编辑器->save($image,'333/yanying-QuadraticBezier-1.jpg');6.创建一个矩形,其实和椭圆差不多,只是个别参数有些区别可以使用如下代码直接创建矩形useGrafika\Grafika;useGrafika\Color;$editorName=Grafika::detectAvailableEditor();$editor=Grafika::createEditor();$editor->open($image,'yanying-更小的.jpg');$editor->draw($image,Grafika::createDrawingObject('Rectangle',85,50));//A85x50nofilledrectanglewithablack1pxborderonlocation0,0.$editor->draw($image,Grafika::createDrawingObject('Rectangle',85,50,array(105,10),0,null,newColor('#FF0000')));//A85x50redrectanglewithnoborder.$editor->draw($image,Grafika::createDrawingObject('Rectangle',85,50,array(105,70),0,null,newColor('#00FF00')));//A85x50greenrectanglewithnoborder.$editor->draw($image,Grafika::createDrawingObject('Rectangle',85,50,array(0,60),1,'#000000',null));//Nofillrectangle$editor->save($image,'333/yanying-Rectangle.jpg');最后一个参数是:宽度。单位是px,第二个是高度,单位是px,第三个是数组,里面有两个值,x:表示矩形左边到图片左边的距离;y:表示矩形顶边到图片顶边的距离。默认值为array(0,0),这意味着它与左上角重叠。第四个参数是边框的宽度,默认为1。当设置为0时,表示没有边框。第五个参数是边框的颜色,默认为黑色。当设置为null时,表示没有颜色。第六个参数为填充颜色,默认为白色,设置为null时表示无颜色我们绘制了几个矩形