PHP 縮放圖片

來源:互聯網
上載者:User

對於網站前端上傳的圖片,在幕後處理時有必要對其進行縮放以產生大小統一的縮圖。在PHP中,可以很方便的使用GD庫來完成這一任務。下面的CImage類的靜態方法CreateThumbnail()函數可以接受原影像檔名稱,縮圖寬高,產生的縮圖檔案名稱等參數來產生保持原圖縱橫比的縮圖。函數基本上體現了PHP產生縮圖的方法,功能上還可以作進一步的擴充,如根據縮圖檔案名稱來產生指定格式的縮圖。

完整代碼如下(Win7+XAMPP2.5及Linuxdev 2.6.18-128+apache測試通過):

//by MoreWindows (http://blog.csdn.net/MoreWindows )class CImage{/** * 產生保持原圖縱橫比的縮圖,支援.png .jpg .gif * 縮圖類型統一為.png格式 * $srcFile     原影像檔名稱 * $toW         縮圖寬 * $toH         縮圖高 * $toFile      縮圖檔案名稱,為空白覆蓋原影像檔 * @return bool    */public static function CreateThumbnail($srcFile, $toW, $toH, $toFile="") {if ($toFile == ""){    $toFile = $srcFile; }$info = "";//返回含有4個單元的數組,0-寬,1-高,2-映像類型,3-寬高的文本描述。//失敗返回false併產生警告。$data = getimagesize($srcFile, $info);if (!$data)return false;//將檔案載入到資源變數im中switch ($data[2]) //1-GIF,2-JPG,3-PNG{    case 1:if(!function_exists("imagecreatefromgif")){echo "the GD can't support .gif, please use .jpeg or .png! <a href='javascript:history.back();'>back</a>";exit();}$im = imagecreatefromgif($srcFile);break;    case 2:if(!function_exists("imagecreatefromjpeg")){echo "the GD can't support .jpeg, please use other picture! <a href='javascript:history.back();'>back</a>";exit();}$im = imagecreatefromjpeg($srcFile);break;      case 3:$im = imagecreatefrompng($srcFile);    break;}//計算縮圖的寬高$srcW = imagesx($im);$srcH = imagesy($im);$toWH = $toW / $toH;$srcWH = $srcW / $srcH;if ($toWH <= $srcWH) {$ftoW = $toW;$ftoH = (int)($ftoW * ($srcH / $srcW));}else {$ftoH = $toH;$ftoW = (int)($ftoH * ($srcW / $srcH));}if (function_exists("imagecreatetruecolor")) {$ni = imagecreatetruecolor($ftoW, $ftoH); //建立一個真彩色映像if ($ni) {//重採樣拷貝部分映像並調整大小 可保持較好的清晰度imagecopyresampled($ni, $im, 0, 0, 0, 0, $ftoW, $ftoH, $srcW, $srcH);} else {//拷貝部分映像並調整大小$ni = imagecreate($ftoW, $ftoH);imagecopyresized($ni, $im, 0, 0, 0, 0, $ftoW, $ftoH, $srcW, $srcH);}}else {$ni = imagecreate($ftoW, $ftoH);imagecopyresized($ni, $im, 0, 0, 0, 0, $ftoW, $ftoH, $srcW, $srcH);}//儲存到檔案 統一為.png格式imagepng($ni, $toFile); //以 PNG 格式將映像輸出到瀏覽器或檔案ImageDestroy($ni);ImageDestroy($im);return true;}}

 

轉載請標明出處,原文地址:http://blog.csdn.net/morewindows/article/details/7062506

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.