分享
 
 
 

配置PHP使之能同时支持GIF和JPEG

王朝php·作者佚名  2008-05-18
窄屏简体版  字體: |||超大  

作 者: 张中华

问题:安装蓝点Linux 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,MySQL-3.23.10alpha,Apache-1.3.12, PHP-4.0.1pl2,gd-1.8.3,Jpeg6b。

我将按照由底向上的顺序介绍,即Jpeg->GD->PHP->Apache。

0、 当前状态查看

安装蓝点Linux 2.0后,Kernel,MySQL,Apache未做任何改变,看看当前状态如何。

创建一PHP文件,名为info.php,放于Apahce的文档目录下(/etc/httpd/html),其内容如下:

<? phpinfo(); ?>

文件就只有1行。用浏览器打开该文件URL(我的hostname为zhangzh):

http://zhangzh/info.php

如果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://ftp.uu.net/graphics/jpeg/

取得的文件为jpegsrc.v6b.tar.gz,放于/usr/src目录下。

进入/usr/src目录中,开始安装过程。

进入/usr/src:

cd /usr/src

解开压缩文件:

tar 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源码的地址为:

http://www.boutell.com/gd/

取得的文件为gd-1.8.3.tar.gz,放于/usr/src目录下。

已知道该版本的GD不支持GIF,但想来象我一样希望GD同时支持GIF和JPEG的人不少,于是有人做了个补丁,把对GIF的支持加回去了。看起来这是个英国人吧,他的Email地址为adam@elysium.ltd.uk。

获取补丁源码的地址为:

http://www.webofsin.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-gif.patch

命令完成后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的主要文件有libphp4.a, libphp4.so等。

获取PHP源码的地址为:

http://php.net

取得的文件为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-debug' '--with-zlib' '--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的结果而指定的。

(由于命令太长,建议写成shell文件再执行。文件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):

http://zhangzh/create-thumb.php

没出错信息。再看Apahce的文档目录(/etc/httpd/html),多了一个缩图文件test-tn.jpg。

大功告成,班师回朝。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有