PHP圖片處理之圖片背景、畫布操作
像驗證碼或根據(jù)動態(tài)數(shù)據(jù)生成統(tǒng)計圖標,以及前面介紹的一些GD庫操作等都屬于動態(tài)繪制圖像。而在web開發(fā)中,也會經常去處理服務器中已存在的圖片。例如,根據(jù)一些需求對圖片進行縮放、加水印、裁剪、翻轉和旋轉等改圖的操作。在web應用中,經常使用的圖片格式有GIF、JPEG和PNG中的一種或幾種,當然GD庫也可以處理其他格式的圖片,但都很少用到。所以安裝GD庫時,至少安裝GIF、JPEG或PNG三種格式中的一種。
在前面介紹的畫布管理中,使用imagecreate()和imageCreateTrueColor()兩個函數(shù)去創(chuàng)建畫布資源。但如果需要對自己已有的圖片進行處理,只要將這個圖片作為畫布資源即可,也就是我們所說的創(chuàng)建圖片背景??梢酝ㄟ^下面介紹的幾個函數(shù),打開服務器或網(wǎng)絡文件中已經存在的GIF、JPEG和PNG圖像,返回一個圖像標識符,代表了從給定的文件名取得的圖像作為操作的背景資源。它們的原型如下所示,它們在失敗時都會返回一個空字符串,并且輸出一條錯誤信息。
resource imagecreatefromjpeg(string $filename) //從JPEG文件或URL新建一圖像
resource imagecreatefrompng(string $filename) //從PNG文件或URL新建一圖像
resource imagecreatefromgif(string $filename) //從GIF文件或URL新建一圖像
不管使用哪個函數(shù)創(chuàng)建的圖像資源,用完以后都需要使用imagedestroy()函數(shù)進行銷毀。再有就是圖片格式對應的問題,任何一種方式打開的圖片資源都可以保存為同一種格式。例如,對于使用imagecreatefromjpeg()函數(shù)創(chuàng)建的圖片資源,可以使用imagepng()函數(shù)以PNG格式將圖像輸出到瀏覽器或文件。當然最好是打開的是哪種格式的圖片,就保存成對應的圖片格式。如果要做到這一點,我們還需要先認識一下getimagesize()函數(shù),通過圖片名稱就可以獲取圖片的類型、寬度和高度等。該函數(shù)的原型如下所示:
array getimagesize(string filename[,array &imageinfo]) //獲取圖片的大小和類型
如果不能訪問filename指定的圖像或者其不是有效圖像,該函數(shù)將返回FALSE并產生一條E_WARNING級的錯誤。如果不出錯,getimagesize()返回一個具有四個單元的數(shù)組,索引0包含圖像寬度的像素值,索引1包含圖像高度的索引值,索引2是圖像類型的標記:1=GIF,2=JPG,3=PNG,4=SWF等,索引3是文本字符串,內容為“height=”yyy” width=”xxx””,可以直接用于<IMG>標記。如下所示:
<?php
list($width,$height,$type,$attr) = getimagesize("image/brophp.jpg");
echo "<img src='image/brophp.jpg'".$attr.">";
?>
下面的例子聲明一個image()函數(shù),可以打開GIF、JPG和PNG中任意格式的圖片,并在圖片的中間加上一個字符串后,保存成原來的格式(文字水印)。在以后的開發(fā)中,如果需要同樣的操作(打開的是哪種格式的圖片,也保存成對應格式的文件),可以參與本例的模式,代碼如下所示:
<?php
//向不同格式的圖片中間畫一個字符串(也是文字水?。?br /> function image($filename,$string){
//獲取圖片的屬性,第一個寬度,第二個高度,類型1=>gif,2=>jpeg,3=>png
list($width,$height,$type) = getimagesize($filename);
//可以處理的圖片類型
$types = array(1=>"gif",2=>"jpeg",3=>"png",);
//通過圖片類型去組合,可以創(chuàng)建對應圖片格式的,創(chuàng)建圖片資源的GD庫函數(shù)
$createfrom = "imagecreatefrom".$types[$type];
//通過“變量函數(shù)”去打對應的函數(shù)去創(chuàng)建圖片的資源
$image = $createfrom($filename);
//設置居中字體的X軸坐標位置
$x = ($width-imagefontwidth(5)*strlen($string))/2;
//設置居中字體的Y軸坐標位置
$y = ($height-imagefontheight(5))/2;
//設置字體的顏色為紅色
$textcolor = imagecolorallocate($image, 255, 0, 0);
//向圖片畫一個指定的字符串
imagestring($image, 5, $x, $y, $string, $textcolor);
//通過圖片類型去組合保存對應格式的圖片函數(shù)
$output = "image".$types[$type];
//通過變量函數(shù)去保存對應格式的圖片
$output($image,$filename);
imagedestroy($image);
}
image("brophp.gif","GIF");
image("brophp.jpg", "JPEG");
image("brophp.png", "PNG");
?>
相關文章
PHP+Mysql基于事務處理實現(xiàn)轉賬功能的方法
這篇文章主要介紹了PHP+Mysql基于事務處理實現(xiàn)轉賬功能的方法,實例分析了mysql事務處理的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-07-07PHP輸出圖像imagegif、imagejpeg與imagepng函數(shù)用法分析
這篇文章主要介紹了PHP輸出圖像imagegif、imagejpeg與imagepng函數(shù)用法,結合實例形式較為詳細的分析了imagegif()、imagejpeg()、imagepng()和imagewbmp()函數(shù)的功能、參數(shù)含義及使用技巧,需要的朋友可以參考下2016-11-11