Nginx怎么配合php实现生成实时缩略图功能

蜗牛 互联网技术资讯 2022-04-29 32 0

这篇文章主要讲解了“Nginx怎么配合php实现生成实时缩略图功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Nginx怎么配合php实现生成实时缩略图功能”吧!

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 第1张

Nginx怎么配合php实现生成实时缩略图功能  nginx 第2张

感谢各位的阅读,以上就是“Nginx怎么配合php实现生成实时缩略图功能”的内容了,经过本文的学习后,相信大家对Nginx怎么配合php实现生成实时缩略图功能这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是蜗牛博客,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:niceseo99@gmail.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

评论