PHP 縮放圖片

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

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

[php] view plain copy

//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! back"; exit(); } $im = imagecreatefromgif($srcFile); break; case 2: if(!function_exists("imagecreatefromjpeg")) { echo "the GD can't support .jpeg, please use other picture! back"; 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.