| 導購 | 订阅 | 在线投稿
分享
 
 
 

Linux環境下如何使用PHP處理圖像

來源:互聯網  2008-05-19 06:26:05  評論

利用PHP創建圖像是相當容易的一件事情。只要安裝一些第三方的庫文件並具有一定的幾何知識,就可以利用PHP來創建和處理圖像了。目前PHP使用GD庫處理圖像。在PHP中一些圖像函數是可以直接使用的,但是大多數函數需要安裝GD函數庫。GD庫提供一系列函數進行畫圖、使用顔色、處理預存的圖像和填充操作。GD庫是Thomas Boutell設計的ANSI C語言編寫,同時支持在perl、Tcl語言中作圖。由于GD是一個可以被建立成共享或靜態的庫,所以在PHP使用GD庫進行圖像操作是非常容易的。GD圖像庫工作原理見圖1。

王朝网络

圖1 PHP圖像調用原理

GD庫目前由Boutell公司維護,官方網址是:http://www.boutell.com/gd/ ,本文寫作時的最新版本是:2004年11月03日4發布的gd 2.0.33。

一. PHP支持的圖像格式和字體

GD庫版本PHP支持以下圖像格式和字體:

1.PNG

PNG(Portable Network Graphics)是一種能存儲32位信息的位圖文件格式,其圖像質量遠勝過gif。同gif一樣,png也使用無損壓縮方式來減少文件的大小。在壓縮位圖數據時,它采用了頗受好評的l z77算法的一個變種。目前,越來越多的軟件開始支持這一格式,在不久的將來,它可能會在整個Web上廣泛流行。png圖像可以是灰階的(16位)或彩色的(48位),也可以是8位的索引色。png圖像使用的是高速交替顯示方案,顯示速度很快,只需要下載1/64的圖像信息就可以顯示出低分辨率的預覽圖像。與gif不同的是,png圖像格式不支持動畫。PNG是PHP支持的確省圖像格式。

2.JPEG

JPEG(Joint Photographic Expert Group)是24位的圖像文件格式,也是一種高效率的壓縮格式,文件格式是JPEG(聯合圖像專家組)標准的産物,該標准由ISO與CCITT(國際電報電話咨詢委員會)共同制定,是面向連續色調靜止圖像的一種壓縮標准。其最初目的是使用64Kbps的通信線路傳輸720×576分辨率壓縮後的圖像。通過損失極少的分辨率,可以將圖像所需存儲量減少至原大小的10%。由于其高效的壓縮效率和標准化要求,目前已廣泛用于彩色傳真、靜止圖像、電話會議、印刷及新聞圖片的傳送上。但那些被刪除的資料無法在解壓時還原,所以jpeg文件並不適合放大觀看,輸出成印刷品時品質也會受到影響。一般情況下,jpeg文件只有幾十KB,而色彩數最高可達到24位,所以它被廣泛運用在互聯網上,以節約寶貴的網絡傳輸資源。

3.WBMP

WBMP (Wireless Bitmap)即無線位圖是專爲行動通訊裝置如行動電話和 PDA 等設計的圖像格式。這種格式用于無線通訊協議 (WAP) 網頁。WBMP 是 1 位的格式,因此只有兩種顔色是可見的:黑色和白色。

4.XBM

XBM(X BitMap)是一種圖形文件格式。是一種古老但通用的圖像文件格式,它與現在的許多Web浏覽器都兼容。X-Windows圖形界面(UNIX和Linux常用的GUI)的C代碼庫xlib中有一個組件專門描述了它的規範。XBM格式本來是爲存儲單色的系統位圖而設計的,比如圖標和鼠標指針。XBM圖形的實質上是使用16進制數組來表示二進制圖像的C源代碼文件。X-Bitmaps是生成簡單Web圖形的一個有意思的選擇,它不需要其它的東西,只要有浏覽器就可以工作。

5.GIF

GIF(Graphics Interchange Format)是在各種平台的各種圖形處理軟件上均能夠處理的、經過壓縮的一種圖形文件格式。GIF文件的數據是基于LZW算法的連續色調的無損壓縮格式。其壓縮率一般在50%左右,它不屬于任何應用程序。目前幾乎所有相關軟件都支持它,公共領域有大量的軟件在使用GIF圖像文件。由于Unisys公司專利原因(GIF 格式使用的 LZW 演算法牽涉到 Unisys 的專利權)PHP一度它不支持GIF格式。如果你非常喜歡這種格式,可以在http://www.linuxguruz.org/downloads/gd1.3.tar.gz 下載這個早期版本不過並不推薦使用。有關GIF格式專利問題的更多信息請看網頁: http://lpf.ai.mit.edu/Patents/Gif/Gif.html 。

6. TrueType 字體

TrueType就是打印和屏幕都適用的可縮放字體。最先由Apple公司開發,是目前計算機上的主要字體類型。位圖字體僅能以它們的單個固定大小來顯示比例,TrueType字體會以三種不同的大小來顯示比例。

7. PostScript字體

PostScript最先由Adobe公司開發,是一種頁面描述語言,用來描述圖形和文本輸出(通常是至 PostScript 打印機)的位置和外觀。PostScript 打印機可打開由任何類型的字體所創建的文本,但爲最大程度上利用 PostScript 的性能,用戶需要專用的 PostScript 字體。PostScript 字體通常稱爲打印機字體。

二、爲PHP配置圖像和字體庫

從PHP4.3開始,PHP捆綁了自己版本的GD2庫。在Windows平台GD2庫自動支持PNG、JPEG格式。如果希望在Unix、BSD、Linux平台使用PNG格式則需要安裝二個動態鏈接函數庫libpng和zlib。可以飽含在Linux發行版本的rpm包或者其官方網址下載源代碼編譯。

zlib庫:http://www.gzip.org/zlib/

編譯時注意使用如下命令行選項:

./configure --with-zlib-dir=/path/to/zlib

libpng庫:http://www.libpng.org/pub/png/

編譯時注意使用如下命令行選項:

./configure --with-png-dir=/path/to/libpng

如果希望在Unix、BSD、Linux平台使用JPEG需要安裝jpeg-6d庫然後重新編譯GD庫。可以在其官方網址下載源代碼編譯。

jpeg-6d庫:ftp://ftp.uu.net/graphics/jpeg/

編譯時注意使用如下命令行選項:

./configure --with-jpeg-dir=/path/to/jpeg-6b

如果希望在Unix、BSD、Linux平台使用TrueType 字體需要安裝TrueType 庫。可以在其官方網址下載源代碼編譯。

TrueType庫:http://www.freetype.org/

如果希望在Unix、BSD、Linux平台使用PostScript Type 1字體需要安裝t1lib庫。可以在其官方網址下載源代碼編譯。

PostScript Type 1庫:ftp://sunsite.unc.edu/pubhttp://Linux.chinaitlab.com/libs/graphics/

編譯時注意使用如下命令行選項:

./configure --with-t1lib[=path/to/t1lib]

以上所有庫編譯結束後,重新啓動Apache服務器後運行phpinfo()來檢查一下新的設置是否生效了。如果出現如下選項,見圖2.

王朝网络

圖2 GD庫配置界面

從圖2可以看到爲PHP配置圖像和字體已經完成。現在,我們就可以開始圖像創建工作了。

三、創建圖像步驟

在PHP中創建一個圖像通常需要以下四個步驟:

1. 創建一個背景圖像,以後所以操作但是基于此背景。

2. 在圖像上繪圖輪廓或或者輸入文本。

3. 輸出最終圖形。

4. 清除內存中所有資源。

下面我們看一個應用實例,一個帶「PHP」標簽的正方型。腳本如下:

<?php

$height = 300;

$width = 300;

$im = ImageCreateTrueColor($width, $height);

$white = ImageColorAllocate ($im, 255, 255, 255);

$blue = ImageColorAllocate ($im, 0, 0, 64);

ImageFill($im, 0, 0, $blue);

ImageLine($im, 0, 0, $width, $height, $white);

ImageString($im, 4, 80, 150, 'PHP', $white);

Header ('Content-type: image/png');

ImagePng ($im);

ImageDestroy($im);

?>

最後把這一小段腳本保存爲si1.php,然後用浏覽器對它進行訪問,就可以看到一個300×300像素大小的PNG格式的圖像,見圖3。

王朝网络

圖3 PNG圖像格式輸出到浏覽器的界面

下面我們詳細講解創建圖像過程:

1. 創建一個背景圖

要在PHP中建立或者修改一個圖像,必須首先建立一個圖像標示符號。這裏提供調用函數:來實現,如下所示:

$im = ImageCreateTrueColor($width, $height)

然後爲這個函數傳遞兩個參數:第一個是新圖像寬度,第二個是新圖像高度。該函數將返回新圖像的標示符號。

2. 在圖像上繪圖、打印文本

在一個圖像上繪圖和打印文本需要兩個步驟:1.首先選擇顔色。這裏通過調用函數$im = ImageCreateTrueColor()爲圖像選擇顔色。顔色由紅、綠、藍(RGB)值的組合決定。這裏使用了兩種顔色:

$white = ImageColorAllocate ($im, 255, 255, 255);

$blue = ImageColorAllocate ($im, 0, 0, 64);

然後需要使用其他函數將顔色繪制到圖像中。這些函數的選擇取決于要繪制的內容:直線、弧形、多邊行或者文本。上面的腳本si1.php,一共使用了三個函數:

ImageFill($im, 0, 0, $blue);

這個函數以圖像標示符號、繪圖區域的起始坐標(X和Y)以及顔色爲參數。{注意PHP中圖像的起始坐標從左上角開始,該點坐標爲X=0,Y=0.圖像右下角的坐標X=$width ,Y=$height。這于常規作圖習慣是相反的。}

ImageLine($im, 0, 0, $width, $height, $white);

這個函數以圖像標示符號、直線的起始點的X和Y坐標以及顔色爲參數。這樣就從左上角(0,0)開始劃一條直線到圖像右下角($width, $height)。

最後我們在該圖像中添加一共標簽:

ImageString($im, 4, 50, 150, 『PHP』, $white);

這個函數以圖像標示符號、字體、文本的起始坐標(X和Y)以及顔色爲參數。字體參數值範圍從1-5之間的數字。這裏選擇的是TrueType字體。

3.輸出最終圖形

可以將圖像輸出到浏覽器或者一共文件。上面的例子中直接輸出到浏覽器。包括兩個部分:.

A.首先告訴Web浏覽器我們輸出的是一個圖像而不是文本或者HTML。

我們發送一個圖形頭來「欺騙」浏覽器,使它認爲我們的PHP頁面是一幅真正的圖像,這樣它才可以正確顯示在屏幕上。服務器將以二進制數據流的形式把程序産生的信息發送到浏覽器。這裏使用函數指定圖像的MIME類型來完成:

Header (『Content-type: image/png』);

通常在使用浏覽器接受一共文件時候,Apache Web服務器首先發送的內容是MIME類型。對于PHP頁面是:

Content-type: text/html

B.發送標題數據後,下面使用如下函數輸出圖像數據。

ImagePng ($im);

該函數以PNG格式將輸出內容發送到浏覽器。

C. 清除資源

當完成對一共圖像的處理後,應當使用銷毀圖像標示符號,然後將所占用的選題資源返回給Web服務器。這裏調用函數ImageDestroy()完成:

ImageDestroy():

ImageDestroy($im);

這樣作是爲了降低CPU負荷。如果你不使用該函數在Web端有太多這樣的圖片産生任務,你可能會發現導致性能下降。

四.應用進階:

1.修改輸出格式:

上面介紹了基礎設定,我們知道PHP支持多種圖像格式,如果你希望以JPEG格式輸出的話,可以修改步驟3將修改爲:

Header (『Content-type: image/jpeg』);

ImageJPEG ($im);

然後存盤,重新啓動Apache web服務器。然後使用浏覽器。注意此時浏覽器上部輸出的格式,見圖4.

王朝网络

圖4 JPEG圖像格式輸出到浏覽器的界面

當然如果希望輸出的圖像到一個文件而不是浏覽器,可以通過修改函數完成:

ImageJPEG ($im,$filename);

這樣圖像會以JPEG格式輸出到filename文件。

2.從其他文件創建背景

上面介紹了通過調用$im = ImageCreateTrueColor()函數建立圖像標示符號。這裏介紹一種通過讀入一個已有的圖像文件,然後對圖像進行過濾,改變其大小或者在基礎上添加其他圖像。根據所讀入文件格式不同通常是:ImageCreateFromPNG(), ImageCreateFromJPEG(), 和ImageCreateFromGIF(),這三個函數都是以文件名爲參數。除了直接以PNG、JPEG等圖像加入IMG標記,還可以在SRC屬性中使用可以能夠生成圖像的PHP腳本。例如:

<img src=「si1.php」 height=「200」 width=「200」 alt=「PHP going 」 />

上面腳本會調用si1.php然後在浏覽器中輸出文本:PHP going

3. 爲PHP配置ImageMagick庫

ImageMagicK主要用于對圖像進行轉換、編輯、組合、特殊處理等,是另外一款非常好用的圖像處理工具。它支持對多種格式的圖像進行處理,最多支持的圖像格式有157種格式,包括目前流行的TIFF、JPEG、PNG、PDF、PhotoCD及GIF等。Image MagicK還支持動態圖像創建,這一點非常適合在Web頁面上使用。Image MagicK支持通過命令行方式對圖像進行處理。另外,它還提供編程接口,高級用戶可以通過C、C++、Perl、Java接口對圖像進行個性化處理。Image MagicK支持數百種的圖像處理,提供多種過濾功能。Image MagicK方便地支持圖像格式轉換,支持透明圖像、可制作多幀GIF圖像、進行圖像合並等。圖像操作包括縮放、旋轉、銳化、減色或特殊效果處理等。並且能夠以另一種圖象格式保存。ImageMagick庫並不是標准PHP的一部分,但是可以通過PHP擴展類庫(PECL 是通過 PEAR 打包系統來的 PHP 擴展庫倉庫,PECL官方網站:http://pecl.php.net/package/ )很容易安裝這個函數庫。和GD2相比ImageMagick庫功能更加豐富。特別是你如果希望創建GIF特別是動畫GIF,那麽推薦使用ImageMagick。ImageMagick官方網站:http://www.imagemagick.org 。下載安裝配置步驟如下:

#wget http://nchc.dl.sourceforge.net/sourceforge/imagemagick/ImageMagick-5.5.7-35.tar.bz2

#bunzip2 ImageMagick-5.5.7-35.tar.bz2

#tar xvf ImageMagick-k-5.5.7-35.tar

#cd ImageMagick-5.5.7-35

#./configure LDFLAGS="-L/usr/lib" CPPFLAGS="-I/usr/include" --prefix=/usr/local/ImageMagick --enable-shared --enable-lzw # 打開lzw格式的壓縮#

make

make install

wget wget http://pecl.php.net/get/imagick-0.9.11.tgz

mkdir ext/ imagick

tar zxvf imagick-0.9.11.tgz

phpize #phpize命令是用來准備 PHP 擴展庫的編譯環境的。#

cd PHP_SRC_DIR/ ext/magickwand # PHP_SRC_DIR是指你的php源碼目錄#

rm configure

./buildconf --force

說明:如果你的PHP的安裝不是在/usr下,你必須從你的安裝目錄下的bin/目錄調出phpize.比如,如果你已經在/usr/local/php下安裝了PHP,你就需要執行/usr/local/php/bin/phpize。可以使用命令:「which phpize 」查看位置,如果是通過rpm 包安裝的可以用這個命令查看:「rpm -qail |grep phpize」。

然後進行php的第二次編譯

./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-imagick=/usr/local/ImageMagick

--with-apxs=/usr/local/apache/bin/apxs

make;make install

以上編譯結束後,重新啓動Apache後運行phpinfo()來檢查一下新的設置是否生效了。如果出現如下選項,見圖5.

王朝网络

圖5 爲PHP加入ImageMagick庫

從圖5可以看到配置ImageMagick庫後可以處理的圖像格式增加到近150多種。ImageMagick 可以幫助PHP完成許多任務以滿足您的命令行圖像處理需求。可以大幅度地減輕工作負擔。也可以通過 C、C++、Perl、Python、Java 和其它幾種語言使用 ImageMagick,Linux 程序員會喜歡這樣做。另外最新ImageMagick網站的已經有了一個叫MagickWand for PHP的插件,也可以支持PHP。讀者可以自己測試。另外如果希望了解更多的PHP圖像操作技巧可以訪問:http://www.devshed.com,這裏有許多動態圖像的PHP腳本。

總結:

本文分五個部分介紹了基于Linux平台下的PHP圖像操作技巧。本文所有腳本在Red Hat Enterprise Linux AS 4.0環境下測試通過,PHP版本4.3.9,GD庫2.08。

小資料:

PHP安裝GD庫後和圖像相關的函數包括:

GetImageSize: 取得圖片的長寬。

ImageArc: 畫弧線。

ImageChar: 寫出橫向字符。

ImageCharUp: 寫出直式字符。

ImageColorAllocate: 匹配顔色。

ImageColorTransparent: 指定透明背景色。

ImageCopyResized: 複制新圖並調整大小。

ImageCreate: 建立新圖。

ImageDashedLine: 繪虛線。

ImageDestroy: 結束圖形。

ImageFill: 圖形著色。

ImageFilledPolygon: 多邊形區域著色。

ImageFilledRectangle: 矩形區域著色。

ImageFillToBorder: 指定顔色區域內著色。

ImageFontHeight: 取得字型的高度。

ImageFontWidth: 取得字型的寬度。

ImageInterlace: 使用交錯式顯示與否。

ImageLine: 繪實線。

ImageLoadFont: 載入點陣字型。

ImagePolygon: 繪多邊形。

ImageRectangle: 繪矩形。

ImageSetPixel: 繪點。

ImageString: 繪橫式字符串。

ImageStringUp: 繪直式字符串。

ImageSX: 取得圖片的寬度。

ImageSY: 取得圖片的高度。

ImageTTFBBox: 計算 TTF 文字所占區域。

ImageTTFText: 寫 TTF 文字到圖中。

ImageColorAt: 取得圖中指定點顔色的索引值。

ImageColorClosest: 計算色表中與指定顔色最接近者。

ImageColorExact: 計算色表上指定顔色索引值。

ImageColorResolve: 計算色表上指定或最接近顔色的索引值。

ImageColorSet: 配置色表上指定索引的顔色。

ImageColorsForIndex: 取得色表上指定索引的顔色。

ImageColorsTotal: 計算圖的顔色數。

ImagePSLoadFont: 載入 PostScript 字型。

ImagePSFreeFont: 卸下 PostScript 字型。

ImagePSEncodeFont: PostScript 字型轉成向量字。

ImagePSText: 寫 PostScript 文字到圖中。

ImagePSBBox: 計算 PostScript 文字所占區域。

ImageCreateFromPNG: 取出 PNG 圖型。

ImagePNG: 建立 PNG 圖型。

ImageCreateFromGIF: 取出 GIF 圖型。

ImageGIF: 建立 GIF 圖型。

  利用PHP創建圖像是相當容易的一件事情。只要安裝一些第三方的庫文件並具有一定的幾何知識,就可以利用PHP來創建和處理圖像了。目前PHP使用GD庫處理圖像。在PHP中一些圖像函數是可以直接使用的,但是大多數函數需要安裝GD函數庫。GD庫提供一系列函數進行畫圖、使用顔色、處理預存的圖像和填充操作。GD庫是Thomas Boutell設計的ANSI C語言編寫,同時支持在perl、Tcl語言中作圖。由于GD是一個可以被建立成共享或靜態的庫,所以在PHP使用GD庫進行圖像操作是非常容易的。GD圖像庫工作原理見圖1。   [url=/bbs/detail_1476966.html][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1211149562539.jpg[/img][/url]   圖1 PHP圖像調用原理   GD庫目前由Boutell公司維護,官方網址是:http://www.boutell.com/gd/ ,本文寫作時的最新版本是:2004年11月03日4發布的gd 2.0.33。   一. PHP支持的圖像格式和字體   GD庫版本PHP支持以下圖像格式和字體:   1.PNG   PNG(Portable Network Graphics)是一種能存儲32位信息的位圖文件格式,其圖像質量遠勝過gif。同gif一樣,png也使用無損壓縮方式來減少文件的大小。在壓縮位圖數據時,它采用了頗受好評的l z77算法的一個變種。目前,越來越多的軟件開始支持這一格式,在不久的將來,它可能會在整個Web上廣泛流行。png圖像可以是灰階的(16位)或彩色的(48位),也可以是8位的索引色。png圖像使用的是高速交替顯示方案,顯示速度很快,只需要下載1/64的圖像信息就可以顯示出低分辨率的預覽圖像。與gif不同的是,png圖像格式不支持動畫。PNG是PHP支持的確省圖像格式。      2.JPEG   JPEG(Joint Photographic Expert Group)是24位的圖像文件格式,也是一種高效率的壓縮格式,文件格式是JPEG(聯合圖像專家組)標准的産物,該標准由ISO與CCITT(國際電報電話咨詢委員會)共同制定,是面向連續色調靜止圖像的一種壓縮標准。其最初目的是使用64Kbps的通信線路傳輸720×576分辨率壓縮後的圖像。通過損失極少的分辨率,可以將圖像所需存儲量減少至原大小的10%。由于其高效的壓縮效率和標准化要求,目前已廣泛用于彩色傳真、靜止圖像、電話會議、印刷及新聞圖片的傳送上。但那些被刪除的資料無法在解壓時還原,所以jpeg文件並不適合放大觀看,輸出成印刷品時品質也會受到影響。一般情況下,jpeg文件只有幾十KB,而色彩數最高可達到24位,所以它被廣泛運用在互聯網上,以節約寶貴的網絡傳輸資源。      3.WBMP   WBMP (Wireless Bitmap)即無線位圖是專爲行動通訊裝置如行動電話和 PDA 等設計的圖像格式。這種格式用于無線通訊協議 (WAP) 網頁。WBMP 是 1 位的格式,因此只有兩種顔色是可見的:黑色和白色。      4.XBM   XBM(X BitMap)是一種圖形文件格式。是一種古老但通用的圖像文件格式,它與現在的許多Web浏覽器都兼容。X-Windows圖形界面(UNIX和Linux常用的GUI)的C代碼庫xlib中有一個組件專門描述了它的規範。XBM格式本來是爲存儲單色的系統位圖而設計的,比如圖標和鼠標指針。XBM圖形的實質上是使用16進制數組來表示二進制圖像的C源代碼文件。X-Bitmaps是生成簡單Web圖形的一個有意思的選擇,它不需要其它的東西,只要有浏覽器就可以工作。      5.GIF   GIF(Graphics Interchange Format)是在各種平台的各種圖形處理軟件上均能夠處理的、經過壓縮的一種圖形文件格式。GIF文件的數據是基于LZW算法的連續色調的無損壓縮格式。其壓縮率一般在50%左右,它不屬于任何應用程序。目前幾乎所有相關軟件都支持它,公共領域有大量的軟件在使用GIF圖像文件。由于Unisys公司專利原因(GIF 格式使用的 LZW 演算法牽涉到 Unisys 的專利權)PHP一度它不支持GIF格式。如果你非常喜歡這種格式,可以在http://www.linuxguruz.org/downloads/gd1.3.tar.gz 下載這個早期版本不過並不推薦使用。有關GIF格式專利問題的更多信息請看網頁: http://lpf.ai.mit.edu/Patents/Gif/Gif.html 。      6. TrueType 字體   TrueType就是打印和屏幕都適用的可縮放字體。最先由Apple公司開發,是目前計算機上的主要字體類型。位圖字體僅能以它們的單個固定大小來顯示比例,TrueType字體會以三種不同的大小來顯示比例。      7. PostScript字體   PostScript最先由Adobe公司開發,是一種頁面描述語言,用來描述圖形和文本輸出(通常是至 PostScript 打印機)的位置和外觀。PostScript 打印機可打開由任何類型的字體所創建的文本,但爲最大程度上利用 PostScript 的性能,用戶需要專用的 PostScript 字體。PostScript 字體通常稱爲打印機字體。   二、爲PHP配置圖像和字體庫   從PHP4.3開始,PHP捆綁了自己版本的GD2庫。在Windows平台GD2庫自動支持PNG、JPEG格式。如果希望在Unix、BSD、Linux平台使用PNG格式則需要安裝二個動態鏈接函數庫libpng和zlib。可以飽含在Linux發行版本的rpm包或者其官方網址下載源代碼編譯。   zlib庫:http://www.gzip.org/zlib/   編譯時注意使用如下命令行選項:   ./configure --with-zlib-dir=/path/to/zlib   libpng庫:http://www.libpng.org/pub/png/   編譯時注意使用如下命令行選項:   ./configure --with-png-dir=/path/to/libpng   如果希望在Unix、BSD、Linux平台使用JPEG需要安裝jpeg-6d庫然後重新編譯GD庫。可以在其官方網址下載源代碼編譯。   jpeg-6d庫:ftp://ftp.uu.net/graphics/jpeg/   編譯時注意使用如下命令行選項:   ./configure --with-jpeg-dir=/path/to/jpeg-6b   如果希望在Unix、BSD、Linux平台使用TrueType 字體需要安裝TrueType 庫。可以在其官方網址下載源代碼編譯。   TrueType庫:http://www.freetype.org/   如果希望在Unix、BSD、Linux平台使用PostScript Type 1字體需要安裝t1lib庫。可以在其官方網址下載源代碼編譯。   PostScript Type 1庫:ftp://sunsite.unc.edu/pubhttp://Linux.chinaitlab.com/libs/graphics/   編譯時注意使用如下命令行選項:   ./configure --with-t1lib[=path/to/t1lib]   以上所有庫編譯結束後,重新啓動Apache服務器後運行phpinfo()來檢查一下新的設置是否生效了。如果出現如下選項,見圖2.   [url=/bbs/detail_1476966.html][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1211149562805.jpg[/img][/url]   圖2 GD庫配置界面   從圖2可以看到爲PHP配置圖像和字體已經完成。現在,我們就可以開始圖像創建工作了。      三、創建圖像步驟   在PHP中創建一個圖像通常需要以下四個步驟:   1. 創建一個背景圖像,以後所以操作但是基于此背景。   2. 在圖像上繪圖輪廓或或者輸入文本。   3. 輸出最終圖形。   4. 清除內存中所有資源。   下面我們看一個應用實例,一個帶「PHP」標簽的正方型。腳本如下:               <?php   $height = 300;   $width = 300;   $im = ImageCreateTrueColor($width, $height);   $white = ImageColorAllocate ($im, 255, 255, 255);   $blue = ImageColorAllocate ($im, 0, 0, 64);   ImageFill($im, 0, 0, $blue);   ImageLine($im, 0, 0, $width, $height, $white);   ImageString($im, 4, 80, 150, 'PHP', $white);   Header ('Content-type: image/png');   ImagePng ($im);   ImageDestroy($im);   ?>   最後把這一小段腳本保存爲si1.php,然後用浏覽器對它進行訪問,就可以看到一個300×300像素大小的PNG格式的圖像,見圖3。   [url=/bbs/detail_1476966.html][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1211149563133.jpg[/img][/url]   圖3 PNG圖像格式輸出到浏覽器的界面      下面我們詳細講解創建圖像過程:   1. 創建一個背景圖   要在PHP中建立或者修改一個圖像,必須首先建立一個圖像標示符號。這裏提供調用函數:來實現,如下所示:   $im = ImageCreateTrueColor($width, $height)   然後爲這個函數傳遞兩個參數:第一個是新圖像寬度,第二個是新圖像高度。該函數將返回新圖像的標示符號。      2. 在圖像上繪圖、打印文本   在一個圖像上繪圖和打印文本需要兩個步驟:1.首先選擇顔色。這裏通過調用函數$im = ImageCreateTrueColor()爲圖像選擇顔色。顔色由紅、綠、藍(RGB)值的組合決定。這裏使用了兩種顔色:   $white = ImageColorAllocate ($im, 255, 255, 255);   $blue = ImageColorAllocate ($im, 0, 0, 64);   然後需要使用其他函數將顔色繪制到圖像中。這些函數的選擇取決于要繪制的內容:直線、弧形、多邊行或者文本。上面的腳本si1.php,一共使用了三個函數:   ImageFill($im, 0, 0, $blue);   這個函數以圖像標示符號、繪圖區域的起始坐標(X和Y)以及顔色爲參數。{注意PHP中圖像的起始坐標從左上角開始,該點坐標爲X=0,Y=0.圖像右下角的坐標X=$width ,Y=$height。這于常規作圖習慣是相反的。}   ImageLine($im, 0, 0, $width, $height, $white);   這個函數以圖像標示符號、直線的起始點的X和Y坐標以及顔色爲參數。這樣就從左上角(0,0)開始劃一條直線到圖像右下角($width, $height)。   最後我們在該圖像中添加一共標簽:   ImageString($im, 4, 50, 150, 『PHP』, $white);   這個函數以圖像標示符號、字體、文本的起始坐標(X和Y)以及顔色爲參數。字體參數值範圍從1-5之間的數字。這裏選擇的是TrueType字體。      3.輸出最終圖形   可以將圖像輸出到浏覽器或者一共文件。上面的例子中直接輸出到浏覽器。包括兩個部分:.   A.首先告訴Web浏覽器我們輸出的是一個圖像而不是文本或者HTML。   我們發送一個圖形頭來「欺騙」浏覽器,使它認爲我們的PHP頁面是一幅真正的圖像,這樣它才可以正確顯示在屏幕上。服務器將以二進制數據流的形式把程序産生的信息發送到浏覽器。這裏使用函數指定圖像的MIME類型來完成:   Header (『Content-type: image/png』);   通常在使用浏覽器接受一共文件時候,Apache Web服務器首先發送的內容是MIME類型。對于PHP頁面是:   Content-type: text/html   B.發送標題數據後,下面使用如下函數輸出圖像數據。   ImagePng ($im);   該函數以PNG格式將輸出內容發送到浏覽器。   C. 清除資源   當完成對一共圖像的處理後,應當使用銷毀圖像標示符號,然後將所占用的選題資源返回給Web服務器。這裏調用函數ImageDestroy()完成:   ImageDestroy():   ImageDestroy($im);   這樣作是爲了降低CPU負荷。如果你不使用該函數在Web端有太多這樣的圖片産生任務,你可能會發現導致性能下降。      四.應用進階:   1.修改輸出格式:   上面介紹了基礎設定,我們知道PHP支持多種圖像格式,如果你希望以JPEG格式輸出的話,可以修改步驟3將修改爲:   Header (『Content-type: image/jpeg』);   ImageJPEG ($im);   然後存盤,重新啓動Apache web服務器。然後使用浏覽器。注意此時浏覽器上部輸出的格式,見圖4.   [url=/bbs/detail_1476966.html][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1211149563430.jpg[/img][/url]   圖4 JPEG圖像格式輸出到浏覽器的界面   當然如果希望輸出的圖像到一個文件而不是浏覽器,可以通過修改函數完成:   ImageJPEG ($im,$filename);   這樣圖像會以JPEG格式輸出到filename文件。   2.從其他文件創建背景   上面介紹了通過調用$im = ImageCreateTrueColor()函數建立圖像標示符號。這裏介紹一種通過讀入一個已有的圖像文件,然後對圖像進行過濾,改變其大小或者在基礎上添加其他圖像。根據所讀入文件格式不同通常是:ImageCreateFromPNG(), ImageCreateFromJPEG(), 和ImageCreateFromGIF(),這三個函數都是以文件名爲參數。除了直接以PNG、JPEG等圖像加入IMG標記,還可以在SRC屬性中使用可以能夠生成圖像的PHP腳本。例如:   <img src=「si1.php」 height=「200」 width=「200」 alt=「PHP going 」 />   上面腳本會調用si1.php然後在浏覽器中輸出文本:PHP going   3. 爲PHP配置ImageMagick庫   ImageMagicK主要用于對圖像進行轉換、編輯、組合、特殊處理等,是另外一款非常好用的圖像處理工具。它支持對多種格式的圖像進行處理,最多支持的圖像格式有157種格式,包括目前流行的TIFF、JPEG、PNG、PDF、PhotoCD及GIF等。Image MagicK還支持動態圖像創建,這一點非常適合在Web頁面上使用。Image MagicK支持通過命令行方式對圖像進行處理。另外,它還提供編程接口,高級用戶可以通過C、C++、Perl、Java接口對圖像進行個性化處理。Image MagicK支持數百種的圖像處理,提供多種過濾功能。Image MagicK方便地支持圖像格式轉換,支持透明圖像、可制作多幀GIF圖像、進行圖像合並等。圖像操作包括縮放、旋轉、銳化、減色或特殊效果處理等。並且能夠以另一種圖象格式保存。ImageMagick庫並不是標准PHP的一部分,但是可以通過PHP擴展類庫(PECL 是通過 PEAR 打包系統來的 PHP 擴展庫倉庫,PECL官方網站:http://pecl.php.net/package/ )很容易安裝這個函數庫。和GD2相比ImageMagick庫功能更加豐富。特別是你如果希望創建GIF特別是動畫GIF,那麽推薦使用ImageMagick。ImageMagick官方網站:http://www.imagemagick.org 。下載安裝配置步驟如下:               #wget http://nchc.dl.sourceforge.net/sourceforge/imagemagick/ImageMagick-5.5.7-35.tar.bz2   #bunzip2 ImageMagick-5.5.7-35.tar.bz2   #tar xvf ImageMagick-k-5.5.7-35.tar   #cd ImageMagick-5.5.7-35   #./configure LDFLAGS="-L/usr/lib" CPPFLAGS="-I/usr/include"   --prefix=/usr/local/ImageMagick --enable-shared   --enable-lzw # 打開lzw格式的壓縮#   make   make install   wget wget http://pecl.php.net/get/imagick-0.9.11.tgz   mkdir ext/ imagick   tar zxvf imagick-0.9.11.tgz   phpize #phpize命令是用來准備 PHP 擴展庫的編譯環境的。#   cd PHP_SRC_DIR/ ext/magickwand # PHP_SRC_DIR是指你的php源碼目錄#   rm configure   ./buildconf --force   說明:如果你的PHP的安裝不是在/usr下,你必須從你的安裝目錄下的bin/目錄調出phpize.比如,如果你已經在/usr/local/php下安裝了PHP,你就需要執行/usr/local/php/bin/phpize。可以使用命令:「which phpize 」查看位置,如果是通過rpm 包安裝的可以用這個命令查看:「rpm -qail |grep phpize」。   然後進行php的第二次編譯               ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql   --with-imagick=/usr/local/ImageMagick   --with-apxs=/usr/local/apache/bin/apxs   make;make install   以上編譯結束後,重新啓動Apache後運行phpinfo()來檢查一下新的設置是否生效了。如果出現如下選項,見圖5.   [url=/bbs/detail_1476966.html][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1211149563758.jpg[/img][/url]   圖5 爲PHP加入ImageMagick庫   從圖5可以看到配置ImageMagick庫後可以處理的圖像格式增加到近150多種。ImageMagick 可以幫助PHP完成許多任務以滿足您的命令行圖像處理需求。可以大幅度地減輕工作負擔。也可以通過 C、C++、Perl、Python、Java 和其它幾種語言使用 ImageMagick,Linux 程序員會喜歡這樣做。另外最新ImageMagick網站的已經有了一個叫MagickWand for PHP的插件,也可以支持PHP。讀者可以自己測試。另外如果希望了解更多的PHP圖像操作技巧可以訪問:http://www.devshed.com,這裏有許多動態圖像的PHP腳本。      總結:   本文分五個部分介紹了基于Linux平台下的PHP圖像操作技巧。本文所有腳本在Red Hat Enterprise Linux AS 4.0環境下測試通過,PHP版本4.3.9,GD庫2.08。   小資料:   PHP安裝GD庫後和圖像相關的函數包括:   GetImageSize: 取得圖片的長寬。   ImageArc: 畫弧線。   ImageChar: 寫出橫向字符。   ImageCharUp: 寫出直式字符。   ImageColorAllocate: 匹配顔色。   ImageColorTransparent: 指定透明背景色。   ImageCopyResized: 複制新圖並調整大小。   ImageCreate: 建立新圖。   ImageDashedLine: 繪虛線。   ImageDestroy: 結束圖形。   ImageFill: 圖形著色。   ImageFilledPolygon: 多邊形區域著色。   ImageFilledRectangle: 矩形區域著色。   ImageFillToBorder: 指定顔色區域內著色。   ImageFontHeight: 取得字型的高度。   ImageFontWidth: 取得字型的寬度。   ImageInterlace: 使用交錯式顯示與否。   ImageLine: 繪實線。   ImageLoadFont: 載入點陣字型。   ImagePolygon: 繪多邊形。   ImageRectangle: 繪矩形。   ImageSetPixel: 繪點。   ImageString: 繪橫式字符串。   ImageStringUp: 繪直式字符串。   ImageSX: 取得圖片的寬度。   ImageSY: 取得圖片的高度。   ImageTTFBBox: 計算 TTF 文字所占區域。   ImageTTFText: 寫 TTF 文字到圖中。   ImageColorAt: 取得圖中指定點顔色的索引值。   ImageColorClosest: 計算色表中與指定顔色最接近者。   ImageColorExact: 計算色表上指定顔色索引值。   ImageColorResolve: 計算色表上指定或最接近顔色的索引值。   ImageColorSet: 配置色表上指定索引的顔色。   ImageColorsForIndex: 取得色表上指定索引的顔色。   ImageColorsTotal: 計算圖的顔色數。   ImagePSLoadFont: 載入 PostScript 字型。   ImagePSFreeFont: 卸下 PostScript 字型。   ImagePSEncodeFont: PostScript 字型轉成向量字。   ImagePSText: 寫 PostScript 文字到圖中。   ImagePSBBox: 計算 PostScript 文字所占區域。   ImageCreateFromPNG: 取出 PNG 圖型。   ImagePNG: 建立 PNG 圖型。   ImageCreateFromGIF: 取出 GIF 圖型。   ImageGIF: 建立 GIF 圖型。   
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有