小編給大家分享一下ThinkPHP5 動態(tài)生成圖片縮略圖的方法,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
為龍鳳等地區(qū)用戶提供了全套網(wǎng)頁設計制作服務,及龍鳳網(wǎng)站建設行業(yè)解決方案。主營業(yè)務為做網(wǎng)站、成都做網(wǎng)站、龍鳳網(wǎng)站設計,以傳統(tǒng)方式定制建設網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
ThinkPHP5動態(tài)生成圖片縮略圖
需求場景
不同終端(PC端、手機端、平板),不同界面(列表頁、詳情頁),對圖片大小的要求不一樣, 如果所有場景下都使用同一尺寸的圖片,勢必對會網(wǎng)絡帶寬及服務器性能造成一定的影響,由此需要服務器端能夠根據(jù)前端的請求參數(shù),自動匹配出相對應的圖片資源,以此來降低服務端的壓力,同時也能給用戶帶來更友好的用戶體驗。
具體步驟如下:
1、開啟apache的rewrite功能,具體方法請自行百度。
2、修改.htaccess
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]
以上配置規(guī)則表示,如果存在對應的圖片資源,則由apache直接返回,如果不存在,則轉(zhuǎn)發(fā)給/index.php/api/Attachment/thumbnail處理器去處理。
其它參數(shù)說明:
$1:圖片所屬模塊
$2:圖片上傳日期
$3:原始圖片名稱(不含后綴)
$4:目標圖片寬度
$5:目標圖片高度
$6:圖片后綴
友情提示:根據(jù)圖片存儲規(guī)則的不同,此處的配置規(guī)則及參數(shù)可以作相應的調(diào)整。
3、新增縮略圖處理程序,此處為Attachment 文件,內(nèi)容如下:
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文件中新增一個方法,內(nèi)容如下:
/** * 預覽圖像 * @param int $quality 圖像質(zhì)量 * @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生成圖像的質(zhì)量范圍從0到9的 imagepng($this->im, null, min((int) ($quality / 10), 9)); } else { $fun = 'image' . $type; $fun($this->im, ''); } exit; }
5、訪問示例
在瀏覽器中輸入:/upload/otherpic57/22349.jpg,將會看到一張寬320,高240的圖片。
以上是“ThinkPHP5 動態(tài)生成圖片縮略圖的方法”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!