旗下导航:搜·么
当前位置:网站首页 > PHP框架 > ThinkPHP > 正文

ThinkPHP5 动态生成图片缩略图【ThinkPHP教程】,ThinkPHP5

作者:搜搜PHP网发布时间:2019-12-28分类:ThinkPHP浏览:86


导读:需求场景差别终端(PC端、手机端、平板),差别界面(列表页、详情页),对图片大小的要求不一样,假如一切场景下都运用统一尺寸的图片,必将对会网络带宽及服务器机能形成肯定的影...
需求场景

差别终端(PC端、手机端、平板),差别界面(列表页、详情页),对图片大小的要求不一样, 假如一切场景下都运用统一尺寸的图片,必将对会网络带宽及服务器机能形成肯定的影响,由此须要服务器端可以依据前端的要求参数,自动匹配出相对应的图片资本,以此来下降服务端的压力,同时也能给用户带来更友爱的用户体验。

具体步骤以下:

1、开启apache的rewrite功用,具体要领请自行百度。

2、修正.htaccess

<IfModule mod_rewrite.c>
  Options +FollowSymlinks -Multiviews
  RewriteEngine On
 
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^public/upload/(.*)/(.*)/(.*)_(\d+)_(\d+).(png|jpg|jpeg|gif)$ /index.php/api/Attachment/thumbnail/module/$1/date/$2/original/$3/width/$4/height/$5/ext/$6 [L,R]
 
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>

以上设置划定规矩示意,假如存在对应的图片资本,则由apache直接返回,假如不存在,则转发给/index.php/api/Attachment/thumbnail处置惩罚器去处置惩罚。

别的参数申明:

$1:图片所属模块

$2:图片上传日期

$3:原始图片称号(不含后缀)

$4:目的图片宽度

$5:目的图片高度

$6:图片后缀

友谊提醒:依据图片存储划定规矩的差别,此处的设置划定规矩及参数可以作响应的调解。

3、新增缩略图处置惩罚顺序,此处为Attachment 文件,内容以下:

public function thumbnail() {
        $savePath = Config::get('attachment_path');
        $defaultImage = $savePath.'default.jpg';
        $params = Request::instance()->param();
        $module = $params['module'];  // 图片所属模块
        $date = $params['date'];      // 图片上传日期
        $original = $params['original']; // 原始图片称号(不含后缀)
        $width = $params['width'];    // 目的图片宽度
        $height = $params['height'];  // 目的图片高度
        $ext = $params['ext'];        // 图片后缀
        $originName = sprintf('%s%s/%s/%s.%s',$savePath,$module,$date,$original,$ext);
        $targetName = sprintf('%s%s/%s/%s_%s_%s.%s',$savePath,$module,$date,$original,$width,$height,$ext);
        if (!file_exists($originName)) {
            $originName = $defaultImage;
            $targetName = sprintf('%sdefault_%s_%s.jpg',$savePath,$width,$height);
        }
        $image = Image::open($originName);
        $thumb = $image->thumb($width, $height);
        if (!file_exists($targetName)) {
            $thumb->save($targetName);
        }
        $thumb->preview();
    }

4、vendor/topthink/think-image/src/Image.php文件中新增一个要领,内容以下:

/**
     * 预览图象
     * @param int         $quality   图象质量
     * @param bool        $interlace 是不是对JPEG范例图象设置隔行扫描
     * @return $this
     */
    public function preview($quality = 100, $interlace = true)
    {
        $type = $this->info['type'];
        header('content-type:'.$this->info['mime']);
        if ('jpeg' == $type || 'jpg' == $type) {
            //JPEG图象设置隔行扫描
            imageinterlace($this->im, $interlace);
            imagejpeg($this->im, null, $quality);
        } elseif ('gif' == $type && !empty($this->gif)) {
            imagegif($this->im, null);
        } elseif ('png' == $type) {
            //设定保留完全的 alpha 通道信息
            imagesavealpha($this->im, true);
            //ImagePNG生成图象的质量范围从0到9的
            imagepng($this->im, null, min((int) ($quality / 10), 9));
        } else {
            $fun = 'image' . $type;
            $fun($this->im, '');
        }
       exit;
    }

5、接见示例

在浏览器中输入:http://域名/public/upload/news/20190325/442b8dba3f706cf6822c1255bcaa68de_320_240.jpg,将会看到一张宽320,高240的图片。

以上就是ThinkPHP5 动态生成图片缩略图的细致内容,更多请关注ki4网别的相干文章!

标签:ThinkPHP5