一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

云服務器|WEB服務器|FTP服務器|郵件服務器|虛擬主機|服務器安全|DNS服務器|服務器知識|Nginx|IIS|Tomcat|

服務器之家 - 服務器技術 - Nginx - Nginx配合php實現生成實時縮略圖功能

Nginx配合php實現生成實時縮略圖功能

2019-10-24 16:59Nginx教程網 Nginx

這篇文章主要介紹了Nginx配合php實現生成實時縮略圖功能,這在一些特殊場合可能會要用到,需要的朋友可以參考下

在做自動靜態化的時候,突然想到下面這個場景,也給出了解決方法。親,真的很實用,耐心看下去。

當我從后臺上傳一個截圖之后,480*800的截圖之后,當時就沒有壓縮出320*480的小縮略圖。好吧,服務器輪詢一下,全部產生出320*480的圖片。

那下一次呢,又有160*240的圖片了,又輪詢嗎,費時費力,還不能馬上就得到小圖。這個時候,我們就要開始抱怨了,怎么要這么多種圖片啊,設計師,你就不能老早就想好要哪些圖片么?

其實,nginx是一個強大的反向代理服務器,通過它的rewrite模塊,我們可以實現自動產生縮略圖,也不用輪詢數據庫了。產品設計,要什么尺寸的,客戶端直接通過某種規則訪問就是了,我馬上就產生給你。
而且,后臺上傳的時候,只要保存一張最大的圖片就ok了。

這樣的話,需要其他尺寸的圖片,僅僅修改客戶端的訪問方式即可。

Nginx配置:

 

復制代碼代碼如下:

#假設,服務器上面有一個文件:abc.jpg,通過http://filefs.domain.com/file/abc.jpg能夠訪問到原圖。其#實一般的,我們在數據庫里面也就保存了“/file/abc.jpg”這部分內容。
#現在,我們要實現通過http://filefs.domain.com/file/abc.jpg.w320.jpg由服務器自動產生#abc.jpg.w320.jpg(w320,320px的寬度)這個縮略圖。并返回圖片數據。
#要滿足以下兩個條件:
#   1.如果abc.jpg.w320.jpg存在,則不重新產生圖片
#   2.如果不存在,則在同一次的請求中,返回圖片數據,和保存圖片文件到服務器。
 
 
server {
    listen       80;
    server_name  filefs.domain.com;
     
    root /var/www/http/filefs.domain.com;
    location / {
        index  index.html index.htm;
    }
     
    location ~ \.(png|jpg|jpeg|gif)$ {
        #如果文件不存在,則rewrite到產生圖片的腳本文件autoimg.php
        if (!-f $request_filename) {
            rewrite ^/.*$ /autoimg.php;
            expires max;
        }
        #如果文件存在,則設置過期時間,關閉訪問日志
        if ( -f $request_filename ) {
            expires max;
            access_log off;
        }
    }
     
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
     
    location ~ autoimg.php$ {#安全性考慮,文件服務器,只這個腳本文件的范圍提交給php處理
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/http/filefs.domain.com$fastcgi_script_name;
        include        /usr/local/nginx/conf/fastcgi_params;
    }
}

 

php產生圖片文件代碼:

 

復制代碼代碼如下:

<?php
    $file = $_SERVER ['REQUEST_URI'];//請求字串 /file/abc.jpg.w320.jpg
    $desfile = $_SERVER ['DOCUMENT_ROOT'] . $file; //目標目標路徑 /var/www/http/file/abc.jpg.w320.jpg
    $dirname = dirname ( $desfile ) . "/";
    $filename = basename ( $desfile );
    if (preg_match ( "/([^\.]+\.(png|jpg|jpeg|gif))\.w([\d]+)\.(jpg)/i", $filename, $m )) {
        $srcfile = $dirname . $m [1];
        $width = $m [3];                    //匹配出輸出文件寬度
        if (in_array ( $width, array (      //只產生202和320寬度的文件
                202,
                320 
        ) ) && file_exists ( $srcfile )) {  //而且文件不存在
            thumbnail ( $srcfile, $desfile, $width );
        }
    }
     
    /**
     * 生成縮略圖
     *
     * @param 源 $src            
     * @param 縮放后的寬帶 $width         
     *
     */
    function thumbnail($src, $des, $width) {
        ob_start ();//開始截獲輸出流
        $imageinfos = getimagesize ( $src );
        $ext = strtolower ( pathinfo ( $src, 4 ) );
        if ($imageinfos [2] == 1) {
            $im = imagecreatefromgif ( $src );
        } elseif ($imageinfos [2] == 2) {
            $im = imagecreatefromjpeg ( $src );
        } elseif ($imageinfos [2] == 3) {
            $im = imagecreatefrompng ( $src );
        }
         
        if (isset ( $im )) {
            $height = $imageinfos [1] * $width / $imageinfos [0];
            $dst_img = ImageCreateTrueColor ( $width, $height );
             
            imagesavealpha ( $dst_img, true );
            $trans_colour = imagecolorallocatealpha ( $dst_img, 0, 0, 0, 127 );
            imagefill ( $dst_img, 0, 0, $trans_colour );
             
            imagecopyresampled ( $dst_img, $im, 0, 0, 0, 0, $width, $height, $imageinfos [0], $imageinfos [1] );
             
            header ( 'content-type:image/jpg' );
            imagejpeg ( $dst_img, null, 90 );//輸出文件流,90--壓縮質量,100表示最高質量。
             
            @imagedestroy ( $im );
            @imagedestroy ( $dst_img );
        } else {
            echo @file_get_contents ( $src );
        }
        $content = ob_get_contents ();//獲取輸出流
        ob_end_flush ();//輸出流到網頁,保證第一次請求也有圖片數據放回
        @file_put_contents ( $des, $content );//保存文件
    }
?>

 

效果圖:

Nginx配合php實現生成實時縮略圖功能

Nginx配合php實現生成實時縮略圖功能

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 美女撒尿部位无遮挡 | 成人免费视频一区二区三区 | 亚久久伊人精品青青草原2020 | 国产香蕉一区二区在线观看 | 手机在线观看精品国产片 | 国产成人啪精品视频站午夜 | 国产在线精品亚洲第一区香蕉 | 四虎在线永久视频观看 | china外卖员gay帮口 | 欧美久草在线 | 国产精品亚洲精品日韩已方 | 男人和女人全黄一级毛片 | 国产精品亚洲午夜不卡 | 超h 超重口 高h 污肉1v1 | a在线观看欧美在线观看 | 精品无码一区二区三区中文字幕 | 精品精品久久宅男的天堂 | 国产精品成人免费 | 国产亚洲成归v人片在线观看 | 嫩草影院永久在线播放 | 狠狠做五月深爱婷婷天天综合 | 精品国产免费久久久久久 | 国产视频久久久久 | 99久久精品免费看国产四区 | 五月天婷婷精品免费视频 | 99久久精品免费观看区一 | 免费国产好深啊好涨好硬视频 | 国产精品日韩在线观看 | 亚洲国产精品成人综合久久久 | 暖暖视频高清图片免费完整版 | 男人j放进女人的p视频免费 | 女教师雪白老汉 | 传说之下羊妈挤羊奶网站 | 国产成人精品一区二三区2022 | 亚洲激情偷拍 | 91大神在线精品播放 | 久青草国产在视频在线观看 | 精品推荐国产麻豆剧传媒 | 美女逼逼软件 | 成人精品一区久久久久 | jzz大全部 |