찾다
php教程PHP源码使用nginx和php实时产生缩略图

使用nginx和php实时产生缩略图

在做自动静态化的时候,突然想到下面这个场景,也给出了解决方法。亲,真的很实用,耐心看下去。

当我从后台上传一个截图之后,480*800的截图之后,当时就没有压缩出320*480的小缩略图。好吧,服务器轮询一下,全部产生出320*480的图片。

那下一次呢,又有160*240的图片了,又轮询吗,费时费力,还不能马上就得到小图。这个时候,我们就要开始抱怨了,怎么要这么多种图片啊,设计师,你就不能老早就想好要哪些图片么?

其实,nginx是一个强大的反向代理服务器,通过它的rewrite模块,我们可以实现自动产生缩略图,也不用轮询数据库了。产品设计,要什么尺寸的,客户端直接通过某种规则访问就是了,我马上就产生给你。

而且,后台上传的时候,只要保存一张最大的图片就ok了。

这样的话,需要其他尺寸的图片,仅仅修改客户端的访问方式即可。

#假设,服务器上面有一个文件:abc.jpg,通过 其
#实一般的,我们在数据库里面也就保存了“/file/abc.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;
    }
}

2. [代码]php产生图片文件

<?php
    $file = $_SERVER [&#39;REQUEST_URI&#39;];//请求字串 /file/abc.jpg.w320.jpg
    $desfile = $_SERVER [&#39;DOCUMENT_ROOT&#39;] . $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 ( &#39;content-type:image/jpg&#39; );
            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 );//保存文件
    }
?>

3. [图片] QQ截图20120606104850.png    

使用nginx和php实时产生缩略图

                       

4. [图片] QQ截图20120606104908.png   

           1185.png


                   

 以上就是使用nginx和php实时产生缩略图的内容,更多相关内容请关注PHP中文网(www.php.cn)!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.