欢迎光临
我们一直在努力

PHP中实现大图自动缩成小图(及GD库的安装)-PHP教程,数据库相关

建站超值云服务器,限时71元/月

我觉得网络编程与普通编程最大的区别就是,网络编程除了具备普通编程的特性外,还要花很大精力考虑速度的问题。

网站上需要很多图片,现在有很多给用户存放照片,图片的“像册”程序,可以让用户自己上传图片,然后自动缩成小图,可以让你在一个页面看到很多小图,然后点击小图看大图。

注意:在网页中指定长宽显示图片,只能让图片以小尺寸显示,但是大小(容量)不变(可以看看属性),速度自然很慢。真正的缩图是把大图的大小(容量)变小,就是重新生成一个小尺寸的图片文件。我的一个程序有此功能,正在测试:www1.yn.cninfo.net/love

另外,装上gd库,还有很多功能,可以用程序画图,做些特别的计数器之类,还可以支持freetype字体等等,里面函数很多,功能很强大。

先简单说说gif,jpg,png,bmp图的区别:他们都是图形压缩格式。gif格式单图最多能显示256种颜色,可以保存多图,适合做小动画,容量较大。 jpeg格式,支持24位(16 百万)种颜色,适合于静态图,容量较小。png格式,包含gif,jpeg的所有特点,支持48位颜色,但是容量较大,而且应用不广泛。 bmp格式,颜色少,非常老的压缩格式,对于网络来说太大了。

在php中实现大图自动缩成小图其实很简单,装上gd库,用一个小函数就可以了,但是安装gd库很麻烦。在1.6.2 版以前的 gd library 有支持 gif 格式的功能,但因为 gif 格式使用的 lzw 演算法牵涉到 unisys 的专利权,因此在 gd library 1.6.2 版之后不支持 gif 的格式。

php 在 3.0.13 版之后,终于支持了 png 的图型格式,使用 png 就不怕会有版权的问题了,而且在 php 这个版本以后,安装编译时会检查 gd library 支持的是旧的 gif 格式还是新的 png 格式来决定是否使用 gif 或 png 的专用函数。

一,安装gd库:

1。环境:windows2000server+php4.0.4+gd+iis

在windows中安装很容易,php4.0以上版本中自带,装好后在php4/extensions 目录中自带动态链接库:php_gd.dll 。只要在php.ini 中把 ;extension=php_gd.dll 前面的;去掉,然后重起webserver(iis或apache),就行了。运行一个带有<? phpinfo();?>的php程序,里面有以下内容就说明可以用了:

gd

gd support enabled

gd version 1.6.2 or higher

freetype support enabled

freetype linkage with ttf library

jpg support enabled

png support enabled

wbmp support enabled

另外,网上有个php_gd_gif.dll 可以下载,把它改名为php_gd.dll覆盖掉原文件,重起iis,就可以实现带gif库的gd库。

到 http://php.weblogs.com/php_gd 下载 php_gd_404.zip,解压完成上面操作。

这是for php4.0.4的,其他版本的php不能用,(老板本的php4.0.0可以去下载php_gd_gif.zip)。

呵呵,搞定后你的phpinfo()就会多显示一个gif support enabled ,但是涉及到版权问题,自己看着办吧。

在linux装gd库就比较麻烦了,先简单说说关于apache和php的安装:当我们在apache环境下安装php的时候,你有三种安装模式可供选择:静态模块、动态模块(dso)和cgi。

常用的是静态模块,就是apache和php在一起编译,这样php的执行效率高一些,但是php要升级或要装gd库之类的附加库时就要把两个都重新编译,很麻烦。动态模块就好办多了,单独重新

编译php就行了,具体安装查看php中的install文件。我费了半天劲安装成功了,介绍一点静态模块加gd库+jpeg+png的心得:

2. 环境: linux6.1+php4.0.6+gd1.8.4+jpeg+png+zlib+apache_1.3.20+mysql

1)下载所需的库:

下载gd库:建议使用version 1.8.4 (stable)稳定版,我编译gd-2.0.1(beta)时,没通过。

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

下载zlib:

http://www.info-zip.org/pub/infozip/zlib/

下载libpng:建议使用libpng-1.0.6-1-src.tar.gz

http://www.turbolinux.com.cn/pub/mirrors/sourceware/cygwin/contrib/libpng/

下载jpegsrc.v6b.tar.gz:

http://www.turbolinux.com.cn/pub/mirrors/gnu/ghostscript/

以下步骤需要按顺序执行:

2)我用的是linux6.1,内核是2.2.12。以root进入,解压所有包,tar -zxvf filename 。然后编译:

3)如果你的linux没有安装zlib,必须先安装zilb,进入zlib-1.1.3 执行:

./configure

make

make install

4)进入libpng-1.0.6,可以在linux,或dos下安装,linux下需要拷贝他的makefile文件, 执行:

cp scripts/makefile.linux makefile

make

make install

5)进入jpeg-6b 执行:

./configure

make

make install

6a)进入gd-1.8.4

修改makefile

检查gd库编译时是否加入加入jpeg支持,得修改makefile文件。

修改makefile文件,使得:

cflags=-o -dhave_libpng -dhave_libjpeg

libs=-lgd -lpng -lz -lm -ljpeg

或者,如果你freetype,xpm,ttf等库都安装了,(安装方法大同小异,自己去找库吧),就改下面:

#cflags=-o -dhave_libxpm -dhave_libpng -dhave_libjpeg

#-dhave_libfreetype -dhave_libttf

#libs=-lgd -lpng -lz -ljpeg -lfreetype -lm -lttf

去掉#

此后,编译并安装:

make

make install

(如果需要mysql,而你没装,就先装mysql,解压,执行: ./configure ; make ; make install

./configure –prefix=/home/mysql ,默认安装路径/usr/local/share/mysql 。)

7)重新编译php,我用的是php-4.0.6,最好先看看安装文件,more install,然后执行:

7.1)解压进入apache_1.3.20,需要先考些文件,执行:

./configure –prefix=/home/apache

–activate-module=src/modules/php4/libphp4.a

7.2)解压进入php-4.0.6,编译安装:

./configure –with-mysql –with-apache=../apache_1.3.20

–with-gd=../gd-1.8.4 –with-jpeg-dir=../jpeg-6b –with-png-dir=../libpng-1.0.6

–with-zlib –enable-track-var

(默认安装路径:/usr/local/lib/php)

8)如果你的php是和apache一起编译的,静态模块,就要重新编译apache,我用的是apache_1.3.20

先停掉apache:./home/apache/bin/apachectl stop

进入apache_1.3.20,需要改文件src/configuration:

加入: addmodule modules/php4/libphp4.a

[ 这是apache_1.3.x的安装,如果你用的是apache_1.2.x,就加入module php4_module mod_php4.o

然后拷贝libphp4.module到src,修改相应语句为:extra_libs=-l. -lphp4 -lgdbm -ldb -l/usr/local/mysql/lib -lmysqlclient

如果你采用动态模块安装,如果是初次安装,修改语句不同,具体查看php的insatll文件。]

然后执行:

./configure –prefix=/home/apache (prefix=是指定存放路径。不带prefix,默认的是/usr/local/apache)

(也可以直接执行./configure –prefix=/home/apache

–activate-module=src/modules/php4/libphp4.a )

make

make install

9)进入 php-4.0.6 执行

cp php.ini-dist /usr/local/lib/php.ini

10)启动apache: ./home/apache/bin/apachectl start

11)运行你的phpinfo()程序,默认apache的根目录是/usr/local/apache/htdocs/ 。如过跟上面windows中显示一样,那就恭喜你安装成功了,可以支持php+gd+jpeg+png了。不行的话,重装试试。

另外,在gd-1.8.3中有个gif的补丁,我试过没有成功,看来要版本很低的linux才行,如果你成功了,或者在linux6.1以上版本中有什么其他办法实现php+gd+gif,麻烦告诉我(e_mail:ubs@ynmail.com)

如果要用gif图形,操作如下,把上面步骤:6a换成6b

使用gd-1.8.3,加上gif补丁编译,使gd库包含gif库:

6b)下载:http://www.boutell.com/gd/http/gd-1.8.3.tar.gz

下载补丁:http://www.webofsin.com/gd-1.8.3-gif.patch

解开,进入gd-1.8.3

打上gif的补丁:patch -p0 <gd-1.8.3-gif.patch

file to patch: gd.c

然后此目录中多了一个gd-1.8.3/gd_gif.c

修改makefile,基本同上。

此后,编译并安装:

其他步骤同上,只要把gd-1.8.4换成gd-1.8.3 。

二,php中大图缩小图的程序实例:(在windows和linux平台都调试通过了。)

1)上传图片页面:(片段)

在<head></head>中间加入下面程序,(这段程序很有用,可以在前台,用户端判断用户上传的文件类型,控制用户的上传文件)

<script language="javascript">

<!–

function checkform(theform)

{

var fileext=theform.zhaopian_up.value.substring(theform.zhaopian_up.value.length-4,theform.zhaopian_up.value.length)

fileext=fileext.tolowercase()

if (!(fileext==.jpg || fileext==.png))

{alert("对不起,不正确的照片文件,必须为*.jpg或*.png文件 !");

theform.zhaopian_up.focus();

return false;

}

return true;

}

// –>

页面中加入上传表单:

<form enctype="multipart/form-data" action="photo_upload2.php" method="post" onsubmit="return checkform(this)">

注:请先上传照片,后填下表。第一张为封面照片,只能传jpg图片,小于300k,少于9张。

<p class="big"> 上传照片:</p>

<input type="file" name="zhaopian_up" size="20"> <input type="submit" value="上传">

</form>

2)处理页面程序,包含判断图片大小,上传拷贝,缩图,生成小图文件,图片id存入数据库等:(片段)

<?

//取得上传文件大小,300k:

if ($zhaopian_up_size>307200) {

$wrong_massage="对不起,你上传的文件大小超过了300k,请缩小图再传!";

header("location:include/wrong_massage.php?wrong_massage=$wrong_massage");

exit();

}

//自动缩图$srcfile原文件,大图;$photo_small目标文件,小图;$dstw,$dsth是小图的宽,高。

function makethumb($srcfile,$photo_small,$dstw,$dsth) {

$data = getimagesize($srcfile,&$info);

switch ($data[[2]]) {

case 1: //图片类型,1是gif图

$im = @imagecreatefromgif($srcfile);

break;

case 2: //图片类型,2是jpg图

$im = @imagecreatefromjpeg($srcfile);

break;

case 3: //图片类型,3是png图

$im = @imagecreatefrompng($srcfile);

break;

}

$srcw=imagesx($im);

$srch=imagesy($im);

$ni=imagecreate($dstw,$dsth);

imagecopyresized($ni,$im,0,0,0,0,$dstw,$dsth,$srcw,$srch);

imagejpeg($ni,$photo_small);

//imagejpeg($ni); //在显示图片时用,把注释取消,可以直接在页面显示出图片。

}

$srcfile=$zhaopian_up;

//取得文件扩展名:

$type=substr(strrchr($zhaopian_up_name,"."),1);

$photo_id=time();

$photo_path="user_picture/$user/";

if(is_dir($photo_path)!=true) mkdir($photo_path,0777);

$photo_small=$photo_path."/".$photo_id."_s.".$type; //小图

$photo_s=fopen($photo_small,"w+");

if ($type=="png" || $type=="jpg") makethumb($srcfile,$photo_small,110,130);//110,130为小图宽,高

?>

在显示图片的程序中,只需从数据库中读出图片id,用$photo_path."/".$photo_id."_s.".$type就是显示小图,加个链接,就可以显示大图$photo_path."/".$photo_id.".".$type;

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » PHP中实现大图自动缩成小图(及GD库的安装)-PHP教程,数据库相关
分享到: 更多 (0)

相关推荐

  • 暂无文章