首頁  >  文章  >  後端開發  >  PHP圖片處理(上)- 基礎

PHP圖片處理(上)- 基礎

齐天大圣
齐天大圣原創
2020-05-03 10:42:11165瀏覽

之前碰到一個專案裡,用到了圖片處理技術。類似下面這個圖一樣

PHP圖片處理(上)- 基礎

圖片分成3個部分組成,背景圖,二維碼圖片,二維碼圖片下面的文字。其中,二維碼圖片以及文字是動態產生的,不一樣的活動,二維碼圖片及文字描述都是不一樣的。

如何完成該需求,我們需要用php的圖片處理技術來實現。 php的圖片處理非常強大,可以做很多事。常見的有驗證碼圖片、圖片浮水印、縮圖等等。

基礎

首先我們要安裝php的擴充GD函式庫。有了他之後,才能繼續進行下面的步驟。以下主要以程式碼為主,函數的具體用法親們自行查閱文件。

建立畫布

主要用到的函數imagecreatetruecolor— 新建一個真彩色影像。

imagecreatetruecolor    ( int $width   , int $height   ) : resource
<?php
// 创建一个100*100的画布
$im = imagecreatetruecolor(100, 100);
// 生成png图片
header("Content-type:image/png");
imagepng($im);
imagedestroy($im);

給畫布設定顏色

主要函數

  • imagecolorallocate — 為一幅圖像分配顏色

  • imagefilll — 區域填色

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

imagecolorallocate## () 傳回標識符,代表了由給定的   RGB 成分組成的顏色。 red,green 和    blue 分別是所需的顏色的紅,綠,藍色成分。這些參數是    0 到 255 的整數或十六進位的  0x00 到 0xFF。

imagecolorallocate()    必須被呼叫以創建每一種用在 image 所代表的圖像中的顏色。

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

#imagefill() 在image   圖像的座標x,  圖像的座標x, 為   0, 0)處以color    顏色執行區域填入(即與x, y 點顏色相同且相鄰的點會填入)。

<?php
header("Content-type:image/png");
// 创建一个100*100的画布
$im = imagecreatetruecolor(100, 100);
// 设置红包
$color = imagecolorallocate($im, 255, 0, 0);
// 填充画布
imagefill($im, 0, 0, $color);
// 生成图片
imagepng($im);
// 销毁资源
imagedestroy($im);

程式會產生一個100*100的紅色背景圖

#繪製圖像

##繪製點和線

主要函數:

  • imagesetpixel — 畫一個單一像素

  • imageline — 畫一條線段

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

imagesetpixel() 在image    影像中以color    顏色在左上角x,y 座標(圖片為   0,0)上畫一個點。

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

imageline() 用color    顏色在圖片image 中從座標 x1,y1 到   x2,y2(影像左上角為   0, 0)畫一條線段。

<?php
$imgHandler = imagecreatetruecolor(100,100);
// 填充背景
$bgColor = imagecolorallocate($imgHandler, 200, 30, 40);
imagefill($imgHandler,0, 0, $bgColor);
// 绘制点
for ($i = 0; $i < 100; $i++) {
   $pointColor = imagecolorallocate($imgHandler, rand(0,200), rand(0,200), rand(0,200));
   imagesetpixel($imgHandler, rand(0, 100), rand(0, 100), $pointColor);
}
// 绘制线
for ($i = 0; $i < 10; $i++) {
   $lineColor = imagecolorallocate($imgHandler, rand(100, 225), rand(100, 225), rand(0, 50));
   imageline($imgHandler, 
       rand(0, 100), 
       rand(0, 100),
       rand(0, 100),
       rand(0, 100), $lineColor);
}
header("Content-Type:image/png");
imagepng($imgHandler);
imagedestroy($imgHandler);

繪製矩形

<?php
$imgHandler = imagecreatetruecolor(100,100);
// 填充背景
$bgColor = imagecolorallocate($imgHandler, 200, 30, 40);
imagefill($imgHandler,0, 0, $bgColor);
// 绘制矩形边框
$borderCol = imagecolorallocate($imgHandler, 23, 32, 200);
imagerectangle($imgHandler, 0, 0, 99, 99, $borderCol);
header("Content-Type:image/png");
imagepng($imgHandler);
imagedestroy($imgHandler);

以上是PHP圖片處理(上)- 基礎的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn