• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • PHP中實現大圖自動縮成小圖(及GD庫的安裝)

    發表于:2007-07-14來源:作者:點擊數: 標簽:
    我覺得 網絡 編程與普通編程最大的區別就是,網絡編程除了具備普通編程的特性外,還要花很大精力考慮速度的問題。 網站上需要很多圖片,現在有很多給用戶存放照片,圖片的“像冊”程序,可以讓用戶自己上傳圖片,然后自動縮成小圖,可以讓你在一個頁面看到很


    我覺得網絡編程與普通編程最大的區別就是,網絡編程除了具備普通編程的特性外,還要花很大精力考慮速度的問題。
    網站上需要很多圖片,現在有很多給用戶存放照片,圖片的“像冊”程序,可以讓用戶自己上傳圖片,然后自動縮成小圖,可以讓你在一個頁面看到很多小圖,然后點擊小圖看大圖。
    注意:在網頁中指定長寬顯示圖片,只能讓圖片以小尺寸顯示,但是大?。ㄈ萘浚┎蛔儯梢钥纯磳傩裕?,速度自然很慢。真正的縮圖是把大圖的大?。ㄈ萘浚┳冃?,就是重新生成一個小尺寸的圖片文件。我的一個程序有此功能,正在測試: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
    下載補?。篽ttp://www.webofsin.com/gd-1.8.3-gif.patch
    解開,進入gd-1.8.3
    打上GIF的補?。簆atch -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;
    在我的一個程序中有此功能,正在測試:www1.yn.cninfo.net/love

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>