萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> php生成縮略圖填充白邊

php生成縮略圖填充白邊

 上傳圖片直接縮放的話就會導致圖片變形,這樣體驗肯定就不好了。下面提供一種解決方法,縮小後添加白邊的方法看下面的代碼實現

網站上傳圖片後生成縮略圖應該是非常常用的功能了,通常來講為了網站顯示美觀,縮略圖會是同樣尺寸,比如最近筆者做的一個站點,縮略圖規格要求都是160×120。但是如果上傳的圖片比例和縮略圖不一致,直接縮放的話就會導致圖片變形,這樣體驗肯定就不好了。於是筆者想了一個折中的辦法,就是縮小後添加白邊的方法。   源圖,尺寸是600×366:   36.jpg   最終生成的效果圖: 37.jpg     代碼相對比較長些,下面簡單說下思路:   先將源圖按比例生成縮略圖,並且寬不大於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);   $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);  
copyright © 萬盛學電腦網 all rights reserved