• 技术文章 >php教程 >php手册

    PHP中实现大图自动缩成小图(及GD库的安装)

    2016-06-21 09:13:58原创548
    PHP中实现大图自动缩成小图(及GD库的安装)
    UB 2001.10.11

    我觉得网络编程与普通编程最大的区别就是,网络编程除了具备普通编程的特性外,还要花很大精力考虑速度的问题。
    网站上需要很多图片,现在有很多给用户存放照片,图片的“像册”程序,可以让用户自己上传图片,然后自动缩成小图,可以让你在一个页面看到很多小图,然后点击小图看大图。
    注意:在网页中指定长宽显示图片,只能让图片以小尺寸显示,但是大小(容量)不变(可以看看属性),速度自然很慢。真正的缩图是把大图的大小(容量)变小,就是重新生成一个小尺寸的图片文件。我的一个程序有此功能,正在测试: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),就行了。运行一个带有的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 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)上传图片页面:(片段)
    中间加入下面程序,(这段程序很有用,可以在前台,用户端判断用户上传的文件类型,控制用户的上传文件)