這次的新需求是,會員要可以上傳自己喜愛的照片,而且要大小不拘,然後需由每一張圖居中的取出最大範圍的正方形圖後,在把他縮小到 60 X 60 的大小去,再存到系統上面去,這樣一來可以減低系統的硬碟的負擔。要作到這樣的話,就必需要利用到 GD 的函數了。
例如,一張 1600 X 1200 的照片上傳以後,需先拮取其中的 1200 X 1200 (中心點不變),再將其縮小成 60 X 60 的圖片!
在主要的輸入畫面上:
<form name="frm" method="POST" action="loadpic.php" enctype="multipart/form-data">
<input id="filename" type="file" size="45" name="filename">( 請上傳您的個人照片!)
<input type="submit" name="doit" value="送出">
</form>
在這裏最重要的是在 <form> 中必需要加上 enctype="multipart/form-data"!
而在 loadpic.php 這隻主要程式中,應如下的寫:
先定義出一個 function 用來抓副檔名:
function getFiletype ($FileName) {
$num=strrpos($FileName,".");
return ".".substr($FileName,$num+1);
}
// 取得上傳的圖片
$src = imagecreatefromjpeg($_FILES['filename']['tmp_name']);
// 取得圖片的寬
$src_w = imagesx($src);
// 取得圖片的長
$src_h = imagesy($src);
// 取得圖片的副檔名 ( 如 jpg, gif... )
$src_type = strtolower(getFiletype($_FILES["filename"]["name"]));
// 依長與寬兩者最短的邊來算出要抓的正方形邊長
if( $src_w > $src_h){
$new_w = $src_h;
$new_h = $src_h;
}else{
$new_w = $src_w;
$new_h = $src_w;
}
// 以長方形的中心來取得正方形的左上方原點
$srt_w = ( $src_w - $new_w ) / 2;
$srt_h = ( $src_h - $new_h ) / 2;
// 定義一個圖形 ( 針對正方形圖形 )
$newpc = imagecreatetruecolor($new_w,$new_h);
// 抓取正方形的截圖
imagecopy($newpc, $src, 0, 0, $srt_w, $srt_h, $new_w, $new_h );
// 建立縮圖
$finpic = imagecreatetruecolor(60,60);
// 開始縮圖
imagecopyresampled($finpic, $newpc, 0, 0, 0, 0, 60, 60, $new_w, $new_h);
// 儲存縮圖到指定的目錄存放 , 檔名就是記錄在 SESSION 中的 login name
imagejpeg($finpic,
"../../images/Upload/Users/".$_SESSION["MemberLoginName"].$src_type);
// 將檔名存到變數 $filename 去,以備記錄到 table 去,方便日後依會員的帳號來抓取圖片
$filename = $_SESSION["MemberLoginName"].$src_type;
大功告成!
非常有用的教材。謝謝!
回覆刪除請問如果想另縮一個較大的圖,用作放大之用應如何寫呢?
CC 您好 :
回覆刪除看不太懂您的意司, 您既要縮一個較大的圖,然後又要放大, 是否有作任何裁切?
不過我想您的問題應該不是太麻煩就是了 , 希您能說下具體的狀況, 比較好一起來討論 ! 謝謝
太好了
回覆刪除讓我發現這個好地方
目前我在幫公司寫會員管理搜尋系統
我目前寫出的功能是
管理員登入後可以看到所有會員的【詳細】資料,而且可以搜尋會員
一般會員登入後只能看到所有會員的【基本】資料,但是無法搜尋會員的功能
現在想改良兩個地方
1.希望一般會員登入後可以看到自己的【詳細】資料
2.希望會員在註冊頁面中加一個上傳圖片的功能,然後可以對應在資料庫中,圖片可以顯示在【基本】資料中(欄位已經留了),希望還可以不限圖片大小,自動把圖片縮在那個欄位裡
希望您可以幫忙小弟解答一下我的問題
如果需要檔案或程式碼
我絕對會配合您
謝謝您
補充一下
回覆刪除那個權限的問題我已經解決了
現在差那個上傳圖片的功能,然後可以對應在資料庫中,圖片可以顯示在【基本】資料中(欄位已經留了),希望還可以不限圖片大小,自動把圖片縮在那個欄位裡
還有
希望可以加上登入多久後自動登出(用session函數)
感恩
讚啦!三兩下就搞定了!
回覆刪除請問,png 縮圖後,背景變黑色的,該怎麼處理
回覆刪除