php圖形圖像處理基礎
php圖形圖像處理基礎,包括驗證碼的生成,以及圖片加水印等操作。
<?php
/GD庫簡介
GD指的是Graphic Device,php的GD庫是用來處理圖形的擴展庫,通過GD庫提供的一系列API,可以對圖像進行處理或者直接生成新的圖片
php除了能進行文本處理以外,通過GD庫,可以對JPG、PNG、GIF、SWF等進行處理。GD庫常用在圖片加水印,驗證碼聲稱等方面
php默認已經生成了GD庫,只需要在安裝的時候開啟就行了/
header("content-type:image/png");
新建一個畫布,通過imagecreatetruecolor函數可以創建一個真彩色的空白圖片
$img = imagecreatetruecolor(100, 100);
$red = imagecolorallocate($img,0xFF,0x00,0x00);
imagefill($img,0,0,$red);
imagepng($img);
$imagedestroy($img);
/繪制線條
GD庫中對畫筆所用的顏色,需要通過imagecolorallcoate函數進行分配,通過參數設定RGB的顏色值來確定畫筆的顏色/
$red = imagecolorallocate($img,0xFF,0x00,0x00);
//然后我們可以通過調用繪制線段函數imageline進行線條的繪制,通過指定起點跟終點來最終得到線條
imageline($img,0,0,100,100,$red)
//繪制好后,通過header與imagepng進行圖像輸出
header("content-type:image/png")
imagepng($img)
//最后可以調用imagedestroy來釋放該圖片占用的內存
imagedestroy($img)
/在圖像中繪制文字
與繪制線條類似,首先要新建一個圖片與初始化顏色
然后使用imagestring函數來進行文字的繪制,這個函數的參數很多
imagestring(resource $image,int $font,int $x,int $y,string $s,int $col)
可以通過$font來設置字體,x,y來設置文字顯示的位置,$s是要繪制的文字,$col是文字的顏色/
imagestring($img,5,0,0,"hello world",$red);
/生成圖像驗證碼
簡單的驗證碼其實就是在圖片中輸出了幾個字符,通過上面的imagestring函數就能實現
但是處理上,為了使驗證碼更加安全,防止其他程序自動識別,因此常常需要對驗證碼進行一些干擾處理,通常會采用繪制一些噪點
干擾線段,對輸出的字符進行傾斜/扭曲等操作
可以使用imagesetpixel繪制點來實現噪點干擾,但是只繪制一些點的作用不但,因此這里常常會使用循環等進行隨機繪制/
$img = imagecreatetruecolor(100,40);
$black = imagecolorallocate($img,0x00,0x00,0x00);
$green = imagecolorallocate($img,0x00,0xFF,0x00);
$white = imagecolorallocate($img,0xFF,0x00,0x00);
imagefill($img,0,0,$white);
$code = '';
for($i = 0;$i < 4;$i++){
$code .=rand(0,9);
}
imagestring($img,5,10,10,$code,$black);
for($i = 0 ; $i < 50 ; $i++){
imagesetpixel($img, rand(0,100), rand(0,100), $black);
imagesetpixel($img,rand(0,100),rand(0,100),$green);
}
header("content-type:image/png");
imagepng($img);
imagedestroy($img);
/給圖片加水印
給圖片加水印的方法有兩種,一種是在圖片上加上一個字符串,另一種是在圖片上加上一個logo或者其他的圖片
因為是已經存在的圖片,可以直接從已經存在的圖片中建立畫布,通過imagecreatefromjpeg可以直接從圖片文件創建圖像/
$img = imagecreatefromjpeg($filename);
/創建圖像對象以后,我們就可以通過前面的GD函數,繪制字符串到圖像上,如果要加的水印是一個logo圖片,那么就需要在建立一個圖像對象
然后通過GD函數imagecopy將logo的圖像復制到源圖像中/
$logo = imagecreatefrompng($filename);
imagecopy($img,$logo,15,15,0,0,$width,$height)
//將logo圖片復制到源圖片上以后,將加水印后的圖片輸出保存就完成了加水印處理
//這里僅僅是為了案例需要準備一些素材圖片
$url = '