今天看到這篇文章想我想到了幾年前幫助一個客戶做一個網站,那種要求里面就有一個寬度不足夠時需要自動給圖片生成白邊了,下面我看到一個不錯的例子整理一下給各位.
網站上傳圖片后生成縮略圖應該是非常常用的功能了,通常來講為了網站顯示美觀,縮略圖會是同樣尺寸,比如最近筆者做的一個站點,縮略圖規格要求都是160×120,但是如果上傳的圖片比例和縮略圖不一致,直接縮放的話就會導致圖片變形,這樣體驗肯定就不好了,于是筆者想了一個折中的辦法,就是縮小后添加白邊的方法.
下面簡單說下思路,先將源圖按比例生成縮略圖,并且寬不大于160、高不大于120,例如上圖會先生成160×98的縮略圖,新建一個160×120的白色背景圖片,將上一步生成的縮略圖居中放置到這張圖片上就OK了,代碼如下:
- //源圖的路徑,可以是本地文件,也可以是遠程圖片
- $src_path = '1.jpg';
- //最終保存圖片的寬
- $width = 160;
- //最終保存圖片的高
- $height = 120;
- //源圖對象
- $src_image = imagecreatefromstring(file_get_contents($src_path));
- $src_width = imagesx($src_image);
- $src_height = imagesy($src_image);
- //生成等比例的縮略圖
- $tmp_image_width = 0;
- $tmp_image_height = 0;
- if ($src_width / $src_height >= $width / $height) {
- $tmp_image_width = $width;
- $tmp_image_height = round($tmp_image_width * $src_height / $src_width);
- } else {
- $tmp_image_height = $height;
- $tmp_image_width = round($tmp_image_height * $src_width / $src_height);
- }
- $tmpImage = imagecreatetruecolor($tmp_image_width, $tmp_image_height);
- imagecopyresampled($tmpImage, $src_image, 0, 0, 0, 0, $tmp_image_width, $tmp_image_height, $src_width, $src_height);
- //添加白邊
- $final_image = imagecreatetruecolor($width, $height);
- $color = imagecolorallocate($final_image, 255, 255, 255);
- imagefill($final_image, 0, 0, $color);
- //開源軟件:Vevb.com
- $x = round(($width - $tmp_image_width) / 2);
- $y = round(($height - $tmp_image_height) / 2);
- imagecopy($final_image, $tmpImage, $x, $y, 0, 0, $tmp_image_width, $tmp_image_height);
- //輸出圖片
- header('Content-Type: image/jpeg');
- imagejpeg($final_image);
新聞熱點
疑難解答