PHP中產生映像程式碼

來源:互聯網
上載者:User

在PHP中繪製映像的函數非常豐富,包括點、線、各種幾何圖形等可以想象出來的平面圖形,都可以通過PHP中提供的各種畫圖函數完成。我們在這裡介紹一些常用的映像繪製,如果使用我們沒有介紹過的函數,可以參考手冊實現。另外,這些圖形繪製函數都需要使用畫布資源,並在畫布中的位置通過座標(原點是在畫布左上方的起始位置,以像素為單位,沿著X軸正方向向右延伸,Y軸正方向向下延伸)決定,並且還可以通過函數的最後一個參數,設定每個圖形的顏色。畫布中的座標系統如圖所示。

1.函數繪圖區域填充imageFill()

通過PHP僅僅繪製出只有邊線的幾何圖形是不夠的,還可以使用對應的填充函數,完成繪圖區域的填充。除了每個圖形都有對應的填充函數之外,還可以使用imageFill()函數實現地區填充。該函數的文法格式如下:

bool imagefill(resource $image,int $x ,int $y,int $color)                    //地區填充

該函數在參數$image代表的映像上,相對於映像左上方(0,0)座標處,從座標($x,$y)處用參數$color指定的顏色執列區域填充。與座標($x,$y)點顏色相同且相鄰的點都會被填充。例如在下面的樣本中,將畫布的背景設定為紅色。代碼如下所示:

 代碼如下 複製代碼
<?php
$im = imagecreatetruecolor(100, 100); //建立100*100大小的畫布
$red = imagecolorallocate($im, 255, 0, 0); //設定一個顏色變數為紅色
 
imagefill($im, 0, 0, $red); //將背景設為紅色
 
header('Content-type:image/png'); //通知瀏覽器這不是文本而是一個圖片
imagepng($im); //產生PNG格式的圖片輸出給瀏覽器
 
imagedestroy($im); //銷毀映像資源,釋放畫布佔用的記憶體空間
?>

2.繪製點和線imageSetPixel()、imageline()

畫點和線是繪製映像中最基本的操作,如果靈活使用,可以通過它們繪製出千變萬化的映像。在PHP中,使用imageSetPixel()函數在畫布中繪製一個單一像素的點,並且可以設定點的顏色。其函數的原型如下所示:

bool imagesetpixel(resource $image,int $x,int $y,int $color)                         //畫一個單一像素

該函數在第一個參數$image中提供的畫布上,距離圓點分別為$x和$y的座標位置,繪製一個顏色為$color的一個像素點。理論上使用畫點函數便可以畫出所需要的所有圖形,也可以使用其他的繪圖函數。如果需要繪製一條線段,可以使用imageline()函數,其文法格式如下所示:

bool imageline(resource $image,int $x1,int $y1,int $x2,int $y2,int $color)                //畫一條線段

我們都知道兩點確定一條線段,所以該函數使用$color顏色在映像$image中,從座標($x1,$x2)開始到($x2,$y2)座標結束畫一條線段。

3.繪製矩形imageRectangle()、imageFilledRectangle()

可以使用imageRectangle()函數繪製矩形,也可以通過imageFilledRectangle()函數繪製一個矩形並填充。這兩個函數的文法格式如下所示:

bool imagerectangle(resource $image,int $x1 , int $y1,int $x2,int $y2,int $color)                    //畫一個矩形
bool imagefilledrectangle(resource image,int $x1 ,int $y1 ,int $x2 ,int $y2,int $color)                      //畫一個矩形並填充

這兩個函數的行為類似,都是在$image映像中畫一個矩形,只不過前者是使用$color參數指定矩形的邊線顏色,而後者則是使用這個顏色填充矩形。相對於映像左上方的(0,0)位置,矩形的左上方座標為($x1,$y1),右下角座標為($x2,$y2)。

4.繪製多邊形imagePolygon()、imagefilledpolygon()

可以使用imagePolygon()函數繪製一個多邊形,也可以通過imageFilledPolygon()函數繪製一個多邊形並填充。這兩個函數的文法格式如下:

bool imagepolygon(resource $image,array $points,int $num_points,int $color)                   //畫一個多邊形
bool imagefilledpolygon(resource $image ,array $points,int $num_points,int $color)                     //畫一個多邊形並填充

這兩個函數的行為類似,都是在$image映像中畫一個多邊形,只不過前者是使用$color參數指定多邊形的邊線顏色,而後者則是使用這個顏色填充多邊形。第二個參數$points是一個PHP數組,包含了多邊形的各個頂點座標。即points[0]=x0,points[1]=y0,points[2]=x1,points[3]=y1,依此類推。第三個參數$num_points是頂點的總數,必須大於3.

5.繪製橢圓imageEllipse()、imageFilledElipse()

可以使用imageEllipse()函數繪製一個橢圓,也可以通過imageFilledEllipse()函數繪製一個橢圓並填充。這兩個函數的文法格式如下:

bool imageellipse(resource $image,int $cx,int $cy,int $w,int $h,int $color)              //畫一個橢圓
bool imagefilledellipse(resource $image,int $cx,int $cy,int $w,int $h,int $color)               //畫一個橢圓填充

這兩個函數行為類似,都是在$image映像中畫一個橢圓,只不過前者是使用$color參數指定橢圓形的邊線顏色,而後者則是使用它填充顏色。相對於畫布左上方座標(0,0),以($cx,$cy)座標為中心畫一個橢圓,參數$w和$h分別指定了橢圓的寬和高。如果成功則返回TRUE,失敗則返回FALSE。

6.繪製弧線imageArc()

就是使用繪製填充圓弧的函數實現的。可以使用imageArc()函數繪製一條弧線,以及圓形和橢圓形。這個函數的文法格式如下:

bool imagearc(resource $image ,int $cx,int $cy,int $w,int $h,int $s,int $e ,int $color) //畫橢圓弧

相對於畫布左上方座標(0,0),該函數以($cx,$cy)座標為中心,在$image所代表的映像中畫一個橢圓弧。其中參數$w和$h分別指定了橢圓的寬度和高度,起始點和結束點以$s和$e參數以角度指定。0º位於三點鐘位置,以順時針方向繪畫。如果要繪製一個完整的圓形,首先要將參數$w和$h設定為相等的值,然後將起始角度$s設定為0,結束角度$e指定為360.如果需要繪製填充圓弧,可以查詢imageFilledArc()函數使用。

下面再看一個由圖片處理函數產生的一個 3D扇形統計圖樣本

 代碼如下 複製代碼

<?php
    //建立畫布,返回一個資源類型的變數$image,並在記憶體中開闢一個臨時地區
    $image = imagecreatetruecolor(100, 100);                //建立畫布大小為100x100
 
    //設定映像中所需的顏色,相當於在畫畫時準備的染料盒
    $white = imagecolorallocate($image, 0xFF, 0xFF, 0xFF);          //為映像分配顏色為白色
    $gray = imagecolorallocate($image, 0xC0, 0xC0, 0xC0);           //為映像分配顏色為灰色
    $darkgray = imagecolorallocate($image, 0x90, 0x90, 0x90);       //為映像分配顏色為暗灰色
    $navy = imagecolorallocate($image, 0x00, 0x00, 0x80);           //為映像分配顏色為深藍色
    $darknavy = imagecolorallocate($image, 0x00, 0x00, 0x50);       //為映像分配顏色為暗深藍色
    $red = imagecolorallocate($image, 0xFF, 0x00, 0x00);           //為映像分配顏色為紅色
    $darkred = imagecolorallocate($image, 0x90, 0x00, 0x00);       //為映像分配顏色為暗紅色
 
    imagefill($image, 0, 0, $white);            //為畫布背景填充背景顏色
    //動態製作3D效果
    for ($i = 60; $i >50; $i--){                //迴圈10次畫出立體效果
        imagefilledarc($image, 50, $i, 100, 50, -160, 40, $darknavy, IMG_ARC_PIE);
        imagefilledarc($image, 50, $i, 100, 50, 40, 75, $darkgray, IMG_ARC_PIE);
        imagefilledarc($image, 50, $i, 100, 50, 75, 200, $darkred, IMG_ARC_PIE);
    }
 
    imagefilledarc($image, 50, 50, 100, 50, -160, 40, $navy, IMG_ARC_PIE);      //畫一橢圓弧且填充
    imagefilledarc($image, 50, 50, 100, 50, 40 , 75, $gray, IMG_ARC_PIE);      //畫一橢圓弧且填充
    imagefilledarc($image, 50, 50, 100, 50, 75, 200, $red, IMG_ARC_PIE);      //畫一橢圓弧且填充
 
    imagestring($image, 1, 15, 55, '34.7%', $white);                //水平地畫一行字串
    imagestring($image, 1, 45, 35, '55.5%', $white);                //水平地畫一行字串
 
    //向瀏覽器中輸出一個GIF格式的圖片
    header('Content-type:image/png');               //使用頭函數告訴瀏覽器以映像方式處理以下輸出
    imagepng($image);                       //向瀏覽器輸出
    imagedestroy($image);                   //銷毀映像釋放資源
?>

直接通過瀏覽器請求該指令碼,或是將該指令碼所在的URL,賦給HTML中的IMG標記的src屬性,都可以擷取動態輸出的映像結果,如下圖所示:

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.