首頁  >  文章  >  後端開發  >  PHP圖形圖像操作

PHP圖形圖像操作

WBOY
WBOY原創
2016-08-08 09:20:09777瀏覽

GD庫簡介

GD指的是Graphic Device,PHP的GD庫是用來處理圖形的擴充庫,透過GD庫提供的一系列API,可以對影像進行處理或直接產生新的圖片。

PHP除了能進行文字處理以外,透過GD庫,可以對JPG、PNG、GIF、SWF等圖片進行處理。 GD庫常用在圖片加浮水印,驗證碼產生等方面。

PHP預設已經整合了GD函式庫,只需要在安裝的時候開啟就行。

<span>header("content-type: image/png"); $img=imagecreatetruecolor(100, 100); $red=imagecolorallocate($img, 0xFF, 0x00, 0x00); imagefill($img, 0, 0, $red); imagepng($img); imagedestroy($img);<span><span></span></span></span></preubuntu></divmicrosoft></p> <divmicrosoft yahei sans gb neue font-size:14px line-height:21px><p><span>rre</span></p> <p><divmicrosoft yahei sans gb neue font-size:14px><p><span>要對圖形進行操作,首先要繪製一個畫布</span>畫筆所使用的顏色,需要透過imagecolorallocate函數進行分配,透過參數設定RGB的顏色值來決定畫筆的顏色:</p> <p><preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>$img = imagecreatetruecolor(100, 100);</span><span></span>然後我們透過呼叫繪製線段函數imageline進行線條的繪製,透過指定起點跟終點來最終得到線條。 </preubuntu></p> <p><preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>$red = imagecolorallocate($img, 0xFF, 0x00, 0x00);</span><span></span>線條繪製好以後,透過header與imagepng進行影像的輸出。 </preubuntu></p> <p><preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>imageline($img, 0, 0, 100, 100, $red);</span><span></span>最後可以呼叫imagedestroy釋放該圖片所佔用的記憶體。 </preubuntu></p> <p><preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>header("content-type: image/png"); imagepng($img);</span><span></span>透過上面的步驟,可以發現PHP繪製圖形非常的簡單,但很多時候我們不只是需要輸出圖片,可能我們還需要得到一個圖片文件,可以通過imagepng函數指定文件名將繪製後的圖像保存到文件中。 </preubuntu></p> <p><preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>imagedestroy($img);</span><span></span></preubuntu></p>在圖像中繪製文字</divmicrosoft></p> <divmicrosoft yahei sans gb neue font-size:14px line-height:21px><p></p> <p>GD庫可以進行多種圖形的基本操作,常用的有繪製線條,背景填充,畫矩形,繪製文字等。 <divmicrosoft yahei sans gb neue font-size:14px><p><span></span>跟繪製線條類似,首先需要新建一個圖片與初始化顏色。 </p> <p><preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>imagepng($img, 'img.png');</span><span></span>然後使用imagestring函數來進行文字的繪製,這個函數的參數很多:imagestring ( resource $image , int $font , int $x , int $y , string $s , int $col ),可以透過$font來設定字體的大小,x,y設定文字顯示的位置,$s是要繪製的文字,$col是文字的顏色。 </preubuntu></p> <p><preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>$img = imagecreatetruecolor(100, 100); $red = imagecolorallocate($img, 0xFF, 0x00, 0x00);</span><span></span></preubuntu></p></divmicrosoft></p>輸出圖像檔案<p><span></span></p> <p>前面我們已經了解到,透過將圖片儲存到檔案可以多次使用。透過指定路徑參數將影像儲存到檔案中。 <divmicrosoft yahei sans gb neue font-size:14px><p><preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>imagestring($img, 5, 0, 0, "Hello world", $red); header("content-type: image/png"); imagepng($img); imagedestroy</span><span>($img); </span><span></span>使用imagepng可以將圖像保存成png格式,如果要保存成其他格式需要使用不同的函數,使用imagejpeg將圖片保存成jpeg格式,imagegif將圖片保存成gif格式,需要說明的是,imagejpeg會對圖片進行壓縮,因此也可以設定一個質量參數。 </preubuntu></p> <p><preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>$filename = 'img.png'; imagepng($img, $filename);</span><span></span></preubuntu></p>生成圖像驗證碼</divmicrosoft></p> <p></p> <p>簡單的驗證碼其實就是在圖片中輸出了幾個字符,透過我們前面章節講到的imagestring函數就能實現。 <divmicrosoft yahei sans gb neue font-size:14px><p><span></span>但是在處理上,為了使驗證碼更加的安全,防止其他程序自動識別,因此常常需要對驗證碼進行一些幹擾處理,通常會採用繪製一些噪點,幹擾線段,對輸出的字符進行傾斜、扭曲等操作。 </p> <p><span></span>可以使用imagesetpixel繪製點來實現雜訊幹擾,但是只繪製一個點的作用不大,因此這裡常常會使用循環進行隨機繪製。 </p> <p><preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>$filename = 'img.jpg'; ?imagejpeg($img, $filename, 80);</span><span></span></preubuntu></p></divmicrosoft></p> <preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>for($i=0;$i<50;$i++) { imagesetpixel($im, rand(0, 100) , rand(0, 100) , $black); imagesetpixel($im, rand(0, 100) , rand(0, 100) , $green); } </span><span></span><br><p><br>給圖片添加水印<br></p><p></p><p>給圖片添加水印的圖片有兩種,一種圖片是一種在圖片上加上圖片上加上一個logo或其他的圖片。 <divmicrosoft yahei sans gb neue font-size:14px><p><span></span>因為這裡處理的是已經存在的圖片,所以可以直接從已存在的圖片建立畫布,透過imagecreatefromjpeg可以直接從圖片檔案建立圖片。 </p> <p><preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>$im = imagecreatefromjpeg($filename);</span><p><span>创建图像对象以后,我们就可以通过前面的GD函数,绘制字符串到图像上。如果要加的水印是一个logo图片,那么就需要再建立一个图像对象,然后通过GD函数imagecopy将logo的图像复制到源图像中。</span></p><preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>$logo = imagecreatefrompng($filename); imagecopy($im, $logo, 15, 15, 0, 0, $width, $height);</span><p><span>当将logo图片复制到原图片上以后,将加水印后的图片输出保存就完成了加水印处理。</span></p><preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>imagejpeg(</span><span>$im, $filename); </span></preubuntu></preubuntu></preubuntu></p></divmicrosoft></p><br><p></p><pre name="code"><?php //这里仅仅是为了案例需要准备一些素材图片 $url = 'http://www.iyi8.com/uploadfile/2014/0521/20140521105216901.jpg'; $content = file_get_contents($url); $filename = 'tmp.jpg'; file_put_contents($filename, $content); $url = 'http://wiki.ubuntu.org.cn/images/3/3b/Qref_Edubuntu_Logo.png'; file_put_contents('logo.png', file_get_contents($url)); //开始添加水印操作 $im = imagecreatefromjpeg($filename); $logo = imagecreatefrompng('logo.png'); $size = getimagesize('logo.png'); imagecopy($im, $logo, 15, 15, 0, 0, $size[0], $size[1]); header("content-type: image/jpeg"); imagejpeg($im);

版权声明:本文为博主原创文章,未经博主允许不得转载。

以上就介绍了PHP图形图像操作,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

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