摘要:查看結(jié)果繪制直線繪制直線就稍微簡單點(diǎn)兒了??梢允褂萌缦碌拇a直接創(chuàng)建一個(gè)矩形其中的參數(shù)第一個(gè)為寬度。默認(rèn)為表示和左上角重疊。
該文章是接著上一篇文章:《PHP極其強(qiáng)大的圖片處理庫Grafika詳細(xì)教程(3):圖像屬性處理》,是grafika教程的一個(gè)部分。
所有的教程目錄
《1、圖像基本處理》
《2、圖像特效處理模塊》
《3、圖像屬性處理》
《4、圖形繪制》
話不多說,我們接著上實(shí)例,要看基礎(chǔ)描述,和下載信息請看第一篇
1、繪制貝塞爾曲線貝塞爾曲線繪制,需要兩個(gè)端點(diǎn),一頭一尾,還有兩個(gè)控制點(diǎn),在之間。所以,必然最起碼4個(gè)參數(shù)。加上一個(gè)顏色共計(jì)5個(gè)參數(shù)。
從做到右,我們依次解釋
第一個(gè)(數(shù)組):表示起始點(diǎn),數(shù)組內(nèi)第一個(gè)參數(shù)為x,第二個(gè)參數(shù)為y(下同)
第二個(gè)(數(shù)組):控制點(diǎn)1(接近起始點(diǎn)),數(shù)組內(nèi)參數(shù)同上
第三個(gè)(數(shù)組):控制點(diǎn)2(接近結(jié)束點(diǎn)),數(shù)組內(nèi)參數(shù)同上
第四個(gè)(數(shù)組):結(jié)束點(diǎn),數(shù)組內(nèi)參數(shù)同上
第五個(gè):顏色,可以用十六進(jìn)制表示,比如:#ff0000
繪制貝塞爾曲線有兩個(gè)方法。但是大體步驟相同。1:、打開圖片;2、繪圖;3、保存或者輸出
1、自行選擇庫,這種方法需要自行判斷
命名空間中的use也需要注意,比之前多了兩個(gè)
use GrafikaGrafika; use GrafikaGdDrawingObjectCubicBezier as GdCubicBezier; use GrafikaImagickDrawingObjectCubicBezier as ImagickCubicBezier; $editor = Grafika::createEditor(); $editor->open($image , "yanying-smaller.jpg"); $editorName = Grafika::detectAvailableEditor(); if("Imagick"===$editorName){ $drawingObject = new ImagickCubicBezier(array(42, 180), array(230, 190), array(42, 45), array(300, 43), "#ff0000"); } else if ("Gd"===$editorName) { $drawingObject = new GdCubicBezier(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自己去選擇當(dāng)前適合的類
這種方法就是簡單了許多,我們這次重新設(shè)定了參數(shù),并且把線條顏色改為了黑色
use GrafikaGrafika; $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");
效果不錯(cuò),以后再搞驗(yàn)證碼就簡單多了
2、繪制橢圓橢圓雖然看著難,但是只要搞清楚確定一個(gè)橢圓的幾個(gè)基本參數(shù)就可以了。
這里使用Ellipse參數(shù)來繪制橢圓。
后面跟著一些繪制橢圓的形狀、樣式參數(shù)。我們從左到右描述
橢圓的寬:px為單位
橢圓的高:px為單位
位置(數(shù)組):數(shù)組內(nèi)第一個(gè)值為x(橢圓最左邊距離圖像最左邊值),第二個(gè)值為y(橢圓最上邊距離圖形最上邊值)
邊框?qū)挾龋簡挝籶x,如果設(shè)置為0,則表示無邊框,默認(rèn)為1px
橢圓邊框顏色:該值需要借助于color類,而不是簡單的填入一個(gè)顏色字符串
橢圓的填充值:該顏色同上
我們創(chuàng)建一個(gè)200*100,距離左邊50,上邊75,邊框?yàn)?,邊框色為黑色,填充紅色的橢圓。
use GrafikaGrafika; use GrafikaColor; $editor = Grafika::createEditor(); $editor->open($image , "yanying-smaller.jpg"); $drawingObject = Grafika::createDrawingObject("Ellipse", 200, 100, array(50, 75), 1, new Color("#000000"), new Color("#FF0000")); $editor->draw( $image, $drawingObject ); $editor->save($image,"333/yanying-Ellipse.jpg");
查看結(jié)果
3、繪制直線繪制直線就稍微簡單點(diǎn)兒了。
第一個(gè)參數(shù)為數(shù)組,表示起始坐標(biāo)
第二個(gè)參數(shù)為數(shù)組,表示結(jié)束坐標(biāo)
第三個(gè)參數(shù)為垂直方向的順序,表示哪根線在上哪根線在下。(其中GD庫會(huì)忽略掉,默認(rèn)為1)
第四個(gè)參數(shù)為顏色,不填默認(rèn)為黑色
我們試著畫幾根線試試:
use GrafikaGrafika; use GrafikaColor; $editor = Grafika::createEditor(); $editor->open($image , "yanying-smaller.jpg"); $editor->draw($image, Grafika::createDrawingObject("Line", array(0, 0), array(200, 200), 1, new Color("#FF0000"))); $editor->draw($image, Grafika::createDrawingObject("Line", array(0, 200), array(200, 0), 1, new Color("#00FF00"))); $editor->draw($image, Grafika::createDrawingObject("Line", array(0, 0), array(200, 100), 1, new Color("#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繪制多邊形,其中參數(shù)為
第一個(gè)參數(shù)為坐標(biāo)點(diǎn),是一個(gè)數(shù)組,其中該數(shù)組內(nèi)有3個(gè)數(shù)組,每個(gè)數(shù)組有兩個(gè)值,第一個(gè)值表示x,第二個(gè)值表示y
形如
array(array(0,0), array(50,0), array(0,50))
第二個(gè)參數(shù)為邊框?qū)挾龋?為沒有,從1開始,單位為px(默認(rèn)為1)
第三個(gè)參數(shù)為邊框顏色(默認(rèn)為黑色)
第四個(gè)參數(shù)為填充色(默認(rèn)白色)
我們試著畫幾個(gè)圖形
use GrafikaGrafika; use GrafikaColor; $editor = Grafika::createEditor(); $editor->open($image , "yanying-smaller.jpg"); $editor->draw( $image, Grafika::createDrawingObject("Polygon", array(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, new Color("#FF0000"))); $editor->save($image,"333/Polygon.jpg");5、二次貝塞爾曲線
又稱貝茲曲線或貝濟(jì)埃曲線,是應(yīng)用于二維圖形應(yīng)用程序的數(shù)學(xué)曲線
其形如這個(gè)樣子
我們使用如下代碼就可以很輕松的創(chuàng)建
use GrafikaGrafika; $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");
其中參數(shù)如下
第一個(gè)參數(shù)為起始點(diǎn)的坐標(biāo),是一個(gè)數(shù)組array(x,y)
第二個(gè)參數(shù)為控制點(diǎn)的坐標(biāo),也是數(shù)組,數(shù)組內(nèi)分別為x,y
第三個(gè)參數(shù)為結(jié)束點(diǎn)的坐標(biāo),也是一個(gè)數(shù)組,數(shù)組內(nèi)為x,y
最后一個(gè)參數(shù)為顏色,默認(rèn)為黑色
當(dāng)然你也可以使用另外一種方式來創(chuàng)建二次貝塞曲線
use GrafikaGrafika; use GrafikaGdDrawingObjectQuadraticBezier as GdQuadraticBezier; use GrafikaImagickDrawingObjectQuadraticBezier as ImagickQuadraticBezier; $editorName = Grafika::detectAvailableEditor(); $editor = Grafika::createEditor(); $editor->open($image , "yanying-smaller.jpg"); if("Imagick"===$editorName){ $drawingObject = new ImagickQuadraticBezier(array(70, 250), array(20, 110), array(220, 60), "#FF0000"); } else if ("Gd"===$editorName) { $drawingObject = new GdQuadraticBezier(array(70, 250), array(20, 110), array(220, 60), "#FF0000"); } $editor->draw( $image, $drawingObject ); $editor->save($image,"333/yanying-QuadraticBezier-1.jpg");6、創(chuàng)建矩形
矩形,其實(shí)和橢圓形差不多,只是有個(gè)別參數(shù)有些差異。
可以使用如下的代碼直接創(chuàng)建一個(gè)矩形
use GrafikaGrafika; use GrafikaColor; $editorName = Grafika::detectAvailableEditor(); $editor = Grafika::createEditor(); $editor->open($image , "yanying-smaller.jpg"); $editor->draw( $image, Grafika::createDrawingObject("Rectangle", 85, 50)); // A 85x50 no filled rectangle with a black 1px border on location 0,0. $editor->draw( $image, Grafika::createDrawingObject("Rectangle", 85, 50, array(105, 10), 0, null, new Color("#FF0000"))); // A 85x50 red rectangle with no border. $editor->draw( $image, Grafika::createDrawingObject("Rectangle", 85, 50, array(105, 70), 0, null, new Color("#00FF00"))); // A 85x50 green rectangle with no border. $editor->draw( $image, Grafika::createDrawingObject("Rectangle", 85, 50, array(0, 60), 1, "#000000", null)); // No fill rectangle $editor->save($image,"333/yanying-Rectangle.jpg");
其中的參數(shù)
第一個(gè)為:寬度。px為單位
第二個(gè)為高度,px為單位
第三個(gè)為一個(gè)數(shù)組,內(nèi)包含兩個(gè)值,x:表示矩形左邊距離圖片左邊的距離;y:表示矩形的上邊距離圖片的上邊距離。默認(rèn)為array(0,0)表示和左上角重疊。
第四個(gè)參數(shù)為邊框的寬度,默認(rèn)為1,當(dāng)設(shè)置為0的時(shí)候,表示沒有邊框
第五個(gè)參數(shù)為邊框的顏色,默認(rèn)為黑色,當(dāng)設(shè)置為null的時(shí)候表示沒有顏色
第六個(gè)參數(shù)為填充顏色,默認(rèn)為白色,當(dāng)設(shè)置為null的時(shí)候表示沒有顏色
我們繪制了幾個(gè)矩形
嚴(yán)穎,PHP研發(fā)工程師
博客:segmentfault主頁
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/22029.html
摘要:該文章是接著上篇文章,極其強(qiáng)大的圖片處理庫詳細(xì)教程圖像特效處理模塊,由于功能太多,所以分開寫,其他的點(diǎn)擊這里圖像基本處理圖像特效處理模塊圖像屬性處理圖形繪制該文章主要寫的圖像屬性處理功能,共個(gè)方法圖片格式化為二進(jìn)制格式輸出該方法的作用是打開 該文章是接著上篇文章,《PHP極其強(qiáng)大的圖片處理庫Grafika詳細(xì)教程(2):圖像特效處理模塊》,由于grafika功能太多,所以分開寫,其他的...
摘要:搞的應(yīng)該都清楚該參數(shù)有個(gè)取值范圍只要大于或者等于就可以,如果值越大,像素點(diǎn)也就越大我們?nèi)≈岛腿≈祵Ρ认聢D片銳化圖片銳化就是補(bǔ)償圖像的輪廓,增強(qiáng)圖像的邊緣及灰度跳變的部分,使圖像變得清晰。 該文章是接著上篇文章《PHP極其強(qiáng)大的圖片處理庫Grafika詳細(xì)教程(1):圖像基本處理》,由于grafika功能太多,所以分開寫,其他的點(diǎn)擊這里 《1、圖像基本處理》《2、圖像特效處理模塊》《3、...
摘要:它包含所有的圖片處理方法。由于,是基于和庫,所以使用方法會(huì)根據(jù)當(dāng)前情況,自動(dòng)選擇所需要的圖片處理庫。這里說明下,如果文字為中文,需要找一個(gè)支持中文的字體。默認(rèn)字體不支持中文,所以你寫中文,就是都是小方框。 Grafika是一個(gè)PHP圖像處理庫,是基于Imagick和GD,可以用于改變圖片大小,剪裁,比較,添加水印等等功能。還有感知哈希,高級圖像過濾,繪制貝塞爾曲線等功能,可謂非常強(qiáng)大。...
閱讀 2787·2021-11-19 11:30
閱讀 3069·2021-11-15 11:39
閱讀 1793·2021-08-03 14:03
閱讀 1999·2019-08-30 14:18
閱讀 2055·2019-08-30 11:16
閱讀 2169·2019-08-29 17:23
閱讀 2611·2019-08-28 18:06
閱讀 2545·2019-08-26 12:22