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 = '