ThinkPHP5 動(dòng)態(tài)生成圖片縮略圖

需求場(chǎng)景

不同終端(PC端回懦、手機(jī)端、平板)次企,不同界面(列表頁(yè)怯晕、詳情頁(yè)),對(duì)圖片大小的要求不一樣缸棵, 如果所有場(chǎng)景下都使用同一尺寸的圖片舟茶,勢(shì)必對(duì)會(huì)網(wǎng)絡(luò)帶寬及服務(wù)器性能造成一定的影響,由此需要服務(wù)器端能夠根據(jù)前端的請(qǐng)求參數(shù)堵第,自動(dòng)匹配出相對(duì)應(yīng)的圖片資源吧凉,以此來(lái)降低服務(wù)端的壓力,同時(shí)也能給用戶帶來(lái)更友好的用戶體驗(yàn)踏志。

具體步驟如下:?

1 開(kāi)啟apache的rewrite功能阀捅,具體方法請(qǐng)自行百度。

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>

以上配置規(guī)則表示针余,如果存在對(duì)應(yīng)的圖片資源饲鄙,則由apache直接返回凄诞,如果不存在,則轉(zhuǎn)發(fā)給/index.php/api/Attachment/thumbnail處理器去處理忍级。

其它參數(shù)說(shuō)明:

$1:圖片所屬模塊

$2:圖片上傳日期

$3:原始圖片名稱(不含后綴)

$4:目標(biāo)圖片寬度

$5:目標(biāo)圖片高度

$6:圖片后綴

友情提示:根據(jù)圖片存儲(chǔ)規(guī)則的不同帆谍,此處的配置規(guī)則及參數(shù)可以作相應(yīng)的調(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'];? ? // 目標(biāo)圖片寬度

? ? ? ? $height = $params['height'];? // 目標(biāo)圖片高度

? ? ? ? $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文件中新增一個(gè)方法,內(nèi)容如下:

/**

? ? * 預(yù)覽圖像

? ? * @param int? ? ? ? $quality? 圖像質(zhì)量

? ? * @param bool? ? ? ? $interlace 是否對(duì)JPEG類型圖像設(shè)置隔行掃描

? ? * @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圖像設(shè)置隔行掃描

? ? ? ? ? ? imageinterlace($this->im, $interlace);

? ? ? ? ? ? imagejpeg($this->im, null, $quality);

? ? ? ? } elseif ('gif' == $type && !empty($this->gif)) {

? ? ? ? ? ? imagegif($this->im, null);

? ? ? ? } elseif ('png' == $type) {

? ? ? ? ? ? //設(shè)定保存完整的 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 訪問(wèn)示例

在瀏覽器中輸入:http://域名/public/upload/news/20190325/442b8dba3f706cf6822c1255bcaa68de_320_240.jpg嗦玖,將會(huì)看到一張寬320患雇,高240的圖片。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末宇挫,一起剝皮案震驚了整個(gè)濱河市苛吱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌器瘪,老刑警劉巖翠储,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異橡疼,居然都是意外死亡援所,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門欣除,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)住拭,“玉大人,你說(shuō)我怎么就攤上這事历帚√显溃” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵挽牢,是天一觀的道長(zhǎng)谱煤。 經(jīng)常有香客問(wèn)我,道長(zhǎng)禽拔,這世上最難降的妖魔是什么刘离? 我笑而不...
    開(kāi)封第一講書人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮奏赘,結(jié)果婚禮上寥闪,老公的妹妹穿的比我還像新娘。我一直安慰自己磨淌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布凿渊。 她就那樣靜靜地躺著梁只,像睡著了一般缚柳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上搪锣,一...
    開(kāi)封第一講書人閱讀 51,274評(píng)論 1 300
  • 那天秋忙,我揣著相機(jī)與錄音,去河邊找鬼构舟。 笑死灰追,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼账千,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼武通!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起预伺,我...
    開(kāi)封第一講書人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后佩迟,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡竿屹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年报强,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拱燃。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡秉溉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出扼雏,到底是詐尸還是另有隱情坚嗜,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布诗充,位于F島的核電站苍蔬,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蝴蜓。R本人自食惡果不足惜碟绑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望茎匠。 院中可真熱鬧格仲,春花似錦、人聲如沸诵冒。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)汽馋。三九已至侮东,卻和暖如春圈盔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背悄雅。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工驱敲, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人宽闲。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓众眨,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親容诬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子娩梨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容