配置PHP使之能同時支援GIF和JPEG (轉)
配置PHP使之能同時支援GIF和JPEG (轉)[@more@]使之能同時支援GIF和JPEG
張中華(mike_z@21cn.com)
問題:藍點 2.0後,進行PHP,發現只能處理GIF影像,不能處理JPEG影像。後來知道PHP處理影像,使用了GD庫,而GD庫開始時是支援GIF的,但由於GIF使用了有版權爭議的LZW演算法,會引起法律問題,於是從GD-1.6開始,GD庫不再支援GIF,改為支援更好的,無版權爭議的PNG。而我現在希望同時支援GIF,PNG和JPEG。
經過嘗試,我成功地做到了這一點。下面介紹具體做法。我的配置為:藍點Linux 2.0,Kernel-2.2.16,My-3.23.10alpha,-1.3.12, PHP-4.0.1pl2,gd-1.8.3,Jpeg6b。
我將按照由底向上的順序介紹,即Jpeg->GD->PHP->Apache。
0、 當前狀態檢視
安裝藍點Linux 2.0後,Kernel,,Apache未做任何改變,看看當前狀態如何。
建立一PHP,名為info.php,放於Apahce的文件目錄下(/etc/httpd/html),其內容如下:
phpinfo(); ?>
檔案就只有1行。用開啟該檔案URL(我的hostname為zhangzh):
如果Apache/PHP正常執行的話,頁面中將會列出PHP版本,Apache版本,以及其他各種有用的資訊。我關心的是GD庫部分,看看它是否支援GIF、JPEG,結果發現支援GIF而不支援JPEG。
1、 Jpeg6b的安裝和配置
Jpeg的主要檔案有jpeglib.h, libjpeg.a, libjpeg.so等。首先檢查中安裝了沒有,到/usr/include目錄下看有無jpeglib.h,到/usr/lib目錄下看有無libjpeg.a和libjpeg.so。我的系統中沒有,因而要安裝。
獲取Jpeg原始碼的地址為:
://ftp.uu/graphics/jpeg/
取得的檔案為jpegsrc.v6b.tar.gz,放於/usr/src目錄下。
進入/usr/src目錄中,開始安裝過程。
進入/usr/src:
cd /usr/src
解開檔案:
xzvf jpegsrc.v6b.tar.gz
命令完成後多了一個子目錄jpeg-6b,Jpeg的原始碼檔案就在其中。
進入該子目錄:
cd jpeg-6b
該目錄中的install.doc檔案詳細介紹瞭如何安裝Jpeg,照章行事即可。
配置生成Makefile檔案:
./configure
命令完成後該目錄下多了個Makefile檔案。Makefile檔案是許多編譯、安裝的配置和過程控制檔案,十分重要,應該學會看懂它的內容。
開始編譯:
make
命令完成後該目錄下多了許多檔案,其中重要的是libjpeg.a和libjpeg.so。
安裝:
make install
命令完成後,jpeglib.h被拷到/usr/local/include目錄下,libjpeg.a和libjpeg.so被拷到/usr/local/lib目錄下。
2、 GD-1.8.3的安裝和配置
GD的主要檔案有gd.h, libgd.a等。
獲取GD原始碼的地址為:
取得的檔案為gd-1.8.3.tar.gz,放於/usr/src目錄下。
已知道該版本的GD不支援GIF,但想來象我一樣希望GD同時支援GIF和JPEG的人不少,於是有人做了個,把對GIF的支援加回去了。看起來這是個英國人吧,他的E地址為adam@elysium.ltd.uk。
獲取補丁原始碼的地址為:
ofsin.com/gd-1.8.3-gif.patch
取得的檔案為gd-1.8.3-gif.patch,放於/usr/src目錄下。
進入/usr/src:
cd /usr/src
解開壓縮檔案:
tar xzvf gd-1.8.3.tar.gz
命令完成後多了一個子目錄gd-1.8.3,GD的原始碼檔案就在其中。
給原始碼打補丁:
patch -p0命令完成後gd-1.8.3子目錄下多了個gd_gif.c檔案,而檔案gd.h和Makefile也被作了相應修改。
進入該子目錄:
cd gd-1.8.3
預設情況下,GD庫編譯時並不加入JPEG支援,得修改Makefile檔案。
修改Makefile檔案,使得:
CFLAGS=-O -DHAVE_XPM -DHAVE_JPEG -DHAVE_LIBTTF
LIBS=-lm -lgd -lpng -lz -ljpeg -lttf -lXpm -lX11
此後,編譯並安裝:
make
make install
命令完成後,gd.h被拷到/usr/local/include目錄下,libgd.a被拷到/usr/local/lib目錄下。
3、 PHP-4.0.1pl2的安裝和配置
PHP的主要檔案有lib.a, libphp4.so等。
獲取PHP原始碼的地址為:
取得的檔案為php-4.0.1pl2.tar.gz,放於/usr/src目錄下。
進入/usr/src目錄並解壓檔案:
cd /usr/src
tar xzvf php-4.0.1pl2.tar.gz
命令完成後多了一個子目錄php-4.0.1pl2,PHP的原始碼檔案就在其中。
進入該子目錄:
cd php-4.0.1pl2
該目錄中的INSTALL檔案詳細介紹瞭如何安裝PHP,照章行事即可。
配置生成Makefile檔案:
./configure '--with-apxs=/usr/sbin/apxs' '--with-mysql' '--with-config-file-path=/etc/httpd' '--enable-safe-mode' '--with-system-regex' '--disable-de' '--with-' '--enable-magic-quotes' '--enable-track-vars' '--with-jpeg-dir=/usr/local' '--with-gd=/usr/local'
注意最後一行引數'--with-jpeg-dir=/usr/local' '--with-gd=/usr/local',指明瞭Jpeg和GD的目錄為/usr/local,這是根據步驟1、2中make install的結果而指定的。
(由於命令太長,建議寫成檔案再。檔案my-php-conf內容如下:
#! /bin/sh
./configure '--with-apxs=/usr/sbin/apxs' '--with-mysql' '--with-config-file-path=/etc/httpd' '--enable-safe-mode' '--with-system-regex' '--disable-debug' '--with-zlib' '--enable-magic-quotes' '--enable-track-vars' '--with-jpeg-dir=/usr/local' '--with-gd=/usr/local'
用shell執行之:
sh my-php-conf
效果是一樣的。)
命令完成後該目錄下多了個Makefile檔案。
編譯並安裝:
make
make install
命令完成後,libphp4.so被拷到/usr/lib/apache目錄下。
4、 Apache的配置
Apache本身不必重新編譯安裝,但使用了新的PHP,須讓Apache知道,得修改Apache的配置檔案並重啟Apache服務。
修改Apache配置檔案/etc/httpd/conf/httpd.conf,使得檔案中包含以下幾行:
LoadModule php4_module modules/libphp4.so
AddModule mod_php4.c
AddType application/x-httpd-php .php3 .php
同時注意把舊的php3的相應行註釋掉,否則會出現衝突而使Apache重啟失敗。
重啟Apache服務:
/etc/rc.d/init.d/httpd restart
5、 例項測試
再次按步驟0的說明檢查當前狀態,我已經看到,PHP改成了新的版本號,GD庫也同時支援GIF和JPEG了。
但我還是想用例項來測試一下,這個例子的功能是讀取一個gif檔案,生成縮圖,然後儲存為另一個jpg檔案。檔案create-thumb.php的內容如下:
function CreateThumbnail($srcFile, $dstFile, $dstW, $dstH)
{
$data = GetImageSize($srcFile,&$info);
switch ($data[2]) {
case 1:
$im = @ImageCreateFromGIF($srcFile);
break;
case 2:
$im = @ImageCreateFromJPEG($srcFile);
break;
case 3:
$im = @ImageCreateFromPNG($srcFile);
break;
}
$srcW=ImageSX($im);
$srcH=ImageSY($im);
if ($srcW <= $dstW && $srcH <= $dstH)
ImageJPEG($im,$dstFile);
else
{
if(($srcW / $srcH) > ($dstW / $dstH))
$dstH = $dstW * $srcH / $srcW;
else
$dstW = $dstH * $srcW / $srcH;
$ni=ImageCreate($dstW,$dstH);
ImageCopyResized($ni,$im,0,0,0,0,$dstW,$dstH,$srcW,$srcH);
ImageJPEG($ni,$dstFile);
}
}
CreateThumbnail("./test.gif", "./test-tn.jpg", 80, 80);
?>
把該檔案放於Apahce的文件目錄下(/etc/httpd/html),同時把測試用的影像檔案test.gif也放於該目錄下,然後用瀏覽器開啟該php檔案(我的hostname為zhangzh):
沒出錯資訊。再看Apahce的文件目錄(/etc/httpd/html),多了一個縮件test-tn.jpg。
大功告成,班師回朝。
from:
date: 2000.11.09
張中華(mike_z@21cn.com)
問題:藍點 2.0後,進行PHP,發現只能處理GIF影像,不能處理JPEG影像。後來知道PHP處理影像,使用了GD庫,而GD庫開始時是支援GIF的,但由於GIF使用了有版權爭議的LZW演算法,會引起法律問題,於是從GD-1.6開始,GD庫不再支援GIF,改為支援更好的,無版權爭議的PNG。而我現在希望同時支援GIF,PNG和JPEG。
經過嘗試,我成功地做到了這一點。下面介紹具體做法。我的配置為:藍點Linux 2.0,Kernel-2.2.16,My-3.23.10alpha,-1.3.12, PHP-4.0.1pl2,gd-1.8.3,Jpeg6b。
我將按照由底向上的順序介紹,即Jpeg->GD->PHP->Apache。
0、 當前狀態檢視
安裝藍點Linux 2.0後,Kernel,,Apache未做任何改變,看看當前狀態如何。
建立一PHP,名為info.php,放於Apahce的文件目錄下(/etc/httpd/html),其內容如下:
phpinfo(); ?>
檔案就只有1行。用開啟該檔案URL(我的hostname為zhangzh):
如果Apache/PHP正常執行的話,頁面中將會列出PHP版本,Apache版本,以及其他各種有用的資訊。我關心的是GD庫部分,看看它是否支援GIF、JPEG,結果發現支援GIF而不支援JPEG。
1、 Jpeg6b的安裝和配置
Jpeg的主要檔案有jpeglib.h, libjpeg.a, libjpeg.so等。首先檢查中安裝了沒有,到/usr/include目錄下看有無jpeglib.h,到/usr/lib目錄下看有無libjpeg.a和libjpeg.so。我的系統中沒有,因而要安裝。
獲取Jpeg原始碼的地址為:
://ftp.uu/graphics/jpeg/
取得的檔案為jpegsrc.v6b.tar.gz,放於/usr/src目錄下。
進入/usr/src目錄中,開始安裝過程。
進入/usr/src:
cd /usr/src
解開檔案:
xzvf jpegsrc.v6b.tar.gz
命令完成後多了一個子目錄jpeg-6b,Jpeg的原始碼檔案就在其中。
進入該子目錄:
cd jpeg-6b
該目錄中的install.doc檔案詳細介紹瞭如何安裝Jpeg,照章行事即可。
配置生成Makefile檔案:
./configure
命令完成後該目錄下多了個Makefile檔案。Makefile檔案是許多編譯、安裝的配置和過程控制檔案,十分重要,應該學會看懂它的內容。
開始編譯:
make
命令完成後該目錄下多了許多檔案,其中重要的是libjpeg.a和libjpeg.so。
安裝:
make install
命令完成後,jpeglib.h被拷到/usr/local/include目錄下,libjpeg.a和libjpeg.so被拷到/usr/local/lib目錄下。
2、 GD-1.8.3的安裝和配置
GD的主要檔案有gd.h, libgd.a等。
獲取GD原始碼的地址為:
取得的檔案為gd-1.8.3.tar.gz,放於/usr/src目錄下。
已知道該版本的GD不支援GIF,但想來象我一樣希望GD同時支援GIF和JPEG的人不少,於是有人做了個,把對GIF的支援加回去了。看起來這是個英國人吧,他的E地址為adam@elysium.ltd.uk。
獲取補丁原始碼的地址為:
ofsin.com/gd-1.8.3-gif.patch
取得的檔案為gd-1.8.3-gif.patch,放於/usr/src目錄下。
進入/usr/src:
cd /usr/src
解開壓縮檔案:
tar xzvf gd-1.8.3.tar.gz
命令完成後多了一個子目錄gd-1.8.3,GD的原始碼檔案就在其中。
給原始碼打補丁:
patch -p0
進入該子目錄:
cd gd-1.8.3
預設情況下,GD庫編譯時並不加入JPEG支援,得修改Makefile檔案。
修改Makefile檔案,使得:
CFLAGS=-O -DHAVE_XPM -DHAVE_JPEG -DHAVE_LIBTTF
LIBS=-lm -lgd -lpng -lz -ljpeg -lttf -lXpm -lX11
此後,編譯並安裝:
make
make install
命令完成後,gd.h被拷到/usr/local/include目錄下,libgd.a被拷到/usr/local/lib目錄下。
3、 PHP-4.0.1pl2的安裝和配置
PHP的主要檔案有lib.a, libphp4.so等。
獲取PHP原始碼的地址為:
取得的檔案為php-4.0.1pl2.tar.gz,放於/usr/src目錄下。
進入/usr/src目錄並解壓檔案:
cd /usr/src
tar xzvf php-4.0.1pl2.tar.gz
命令完成後多了一個子目錄php-4.0.1pl2,PHP的原始碼檔案就在其中。
進入該子目錄:
cd php-4.0.1pl2
該目錄中的INSTALL檔案詳細介紹瞭如何安裝PHP,照章行事即可。
配置生成Makefile檔案:
./configure '--with-apxs=/usr/sbin/apxs' '--with-mysql' '--with-config-file-path=/etc/httpd' '--enable-safe-mode' '--with-system-regex' '--disable-de' '--with-' '--enable-magic-quotes' '--enable-track-vars' '--with-jpeg-dir=/usr/local' '--with-gd=/usr/local'
注意最後一行引數'--with-jpeg-dir=/usr/local' '--with-gd=/usr/local',指明瞭Jpeg和GD的目錄為/usr/local,這是根據步驟1、2中make install的結果而指定的。
(由於命令太長,建議寫成檔案再。檔案my-php-conf內容如下:
#! /bin/sh
./configure '--with-apxs=/usr/sbin/apxs' '--with-mysql' '--with-config-file-path=/etc/httpd' '--enable-safe-mode' '--with-system-regex' '--disable-debug' '--with-zlib' '--enable-magic-quotes' '--enable-track-vars' '--with-jpeg-dir=/usr/local' '--with-gd=/usr/local'
用shell執行之:
sh my-php-conf
效果是一樣的。)
命令完成後該目錄下多了個Makefile檔案。
編譯並安裝:
make
make install
命令完成後,libphp4.so被拷到/usr/lib/apache目錄下。
4、 Apache的配置
Apache本身不必重新編譯安裝,但使用了新的PHP,須讓Apache知道,得修改Apache的配置檔案並重啟Apache服務。
修改Apache配置檔案/etc/httpd/conf/httpd.conf,使得檔案中包含以下幾行:
LoadModule php4_module modules/libphp4.so
AddModule mod_php4.c
AddType application/x-httpd-php .php3 .php
同時注意把舊的php3的相應行註釋掉,否則會出現衝突而使Apache重啟失敗。
重啟Apache服務:
/etc/rc.d/init.d/httpd restart
5、 例項測試
再次按步驟0的說明檢查當前狀態,我已經看到,PHP改成了新的版本號,GD庫也同時支援GIF和JPEG了。
但我還是想用例項來測試一下,這個例子的功能是讀取一個gif檔案,生成縮圖,然後儲存為另一個jpg檔案。檔案create-thumb.php的內容如下:
function CreateThumbnail($srcFile, $dstFile, $dstW, $dstH)
{
$data = GetImageSize($srcFile,&$info);
switch ($data[2]) {
case 1:
$im = @ImageCreateFromGIF($srcFile);
break;
case 2:
$im = @ImageCreateFromJPEG($srcFile);
break;
case 3:
$im = @ImageCreateFromPNG($srcFile);
break;
}
$srcW=ImageSX($im);
$srcH=ImageSY($im);
if ($srcW <= $dstW && $srcH <= $dstH)
ImageJPEG($im,$dstFile);
else
{
if(($srcW / $srcH) > ($dstW / $dstH))
$dstH = $dstW * $srcH / $srcW;
else
$dstW = $dstH * $srcW / $srcH;
$ni=ImageCreate($dstW,$dstH);
ImageCopyResized($ni,$im,0,0,0,0,$dstW,$dstH,$srcW,$srcH);
ImageJPEG($ni,$dstFile);
}
}
CreateThumbnail("./test.gif", "./test-tn.jpg", 80, 80);
?>
把該檔案放於Apahce的文件目錄下(/etc/httpd/html),同時把測試用的影像檔案test.gif也放於該目錄下,然後用瀏覽器開啟該php檔案(我的hostname為zhangzh):
沒出錯資訊。再看Apahce的文件目錄(/etc/httpd/html),多了一個縮件test-tn.jpg。
大功告成,班師回朝。
from:
date: 2000.11.09
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-987238/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Nginx配置域名同時支援 https 和 http 訪問NginxHTTP
- BMP、GIF、JPEG、PNG、SVG、WebP區別SVGWeb
- 怎麼把Excel 表格轉成PNG、JPEG、GIF圖片格式 ?Excel
- 使用IDropTarget介面同時支援文字和檔案拖放 (轉)
- 如何讓服務端同時支援WebSocket和SSL加密的WebSocket(即同時支援ws和wss)?服務端Web加密
- 應用同時支援HTTP和HTTPSHTTP
- Nginx配置支援phpNginxPHP
- spring-boot 同時配置Oracle和MySQLSpringbootOracleMySql
- 介紹Nginx配置支援PHPNginxPHP
- 配置nginx對php的支援NginxPHP
- JPEG轉RGB Bmp(IJG庫 jpeg.lib)
- 一根Express Route同時支援ARM和ASM的VNETExpressASM
- PHP TP框架同時使用where whereOrPHP框架
- linux_php_jpeg6,png,gdLinuxPHP
- PHP安全配置(轉)PHP
- AFN框架 之同時相容Http和Https通訊配置框架HTTP
- 點晴OA同時支援PC端、APP端、微信端和釘釘APP
- 配置php_opcache擴充套件使php7執行更加快速PHPopcache套件
- PHP同時操作多個MySQL連線PHPMySql
- Nginx配置正向代理支援HTTP和HTTPS轉發NginxHTTP
- 轉~timesten系列七:配置高可用性的TT,同時實現和cache和後臺oracle整合Oracle
- **PHP二維陣列遍歷時同時賦值PHP陣列賦值
- 配置ubuntu支援ADSL(轉)Ubuntu
- 在C++ Builder中用socket api來寫網路通訊程式(同時支援TCP和UDP協議) (轉)C++UIAPITCPUDP協議
- RGB轉jpeg(opencv或IJG)OpenCV
- Linux伺服器---配置apache支援phpLinux伺服器ApachePHP
- 讓IIS支援PHP的配置步驟薦PHP
- 同時使用資料庫鏈和序列時應注意的幾點(轉)資料庫
- PHP 避免同時執行一個指令碼PHP指令碼
- 安裝與配置PHP,讓apache和php一起工作 (轉)PHPApache
- 微信掃碼點餐,支援同桌同時點餐,實時同步。
- MyEclipse同時配置多個tomcatEclipseTomcat
- 影片怎麼轉換成gif動圖?分享影片轉gif的教程
- C++圖片格式轉換:BMP轉JPEGC++
- java時間戳和PHP時間戳的轉換phptime()Java時間戳PHP
- springboot部署到阿里雲,配置https,springboot專案同時支援http和https請求,阿里雲配置httpsSpring Boot阿里HTTP
- Video GIF converter for Mac(gif視訊轉換器)IDEMac
- jpeg轉化jpg怎麼操作 jpeg怎麼線上免費改為jpg格式