本程式碼整合檔案上傳驗證、圖片水印(文字或圖片)、多位置選擇、自動生成縮略圖預覽等功能,採用程序式寫法,邏輯清晰,適合直接整合至專案或作為學習參考。
$uptypes = array('image/jpg', 'image/jpeg', 'image/png', 'image/pjpeg', 'image/gif', 'image/bmp', 'image/x-png');
$max_file_size = 5000000; // 5MB
$destination_folder = "upload/"; // 上傳目錄
$watermark = 1; // 1=加水印
$watertype = 1; // 1=文字, 2=圖片
$waterposition = 1; // 1=左下, 2=右下, 3=左上, 4=右上, 5=置中
$waterstring = "newphp.site.cz"; // 水印文字
$waterimg = "xplore.gif"; // 水印圖片
$imgpreview = 1; // 1=生成預覽
$imgpreviewsize = 1/2; // 縮略圖比例
<img> 標籤,寬高依比例縮小。$iinfo = getimagesize($destination, $iinfo);
$nimage = imagecreatetruecolor($image_size[0], $image_size[1]);
$white = imagecolorallocate($nimage, 255, 255, 255);
$black = imagecolorallocate($nimage, 0, 0, 0);
imagefill($nimage, 0, 0, $white);
switch ($iinfo[2]) {
case 1: $simage = imagecreatefromgif($destination); break;
case 2: $simage = imagecreatefromjpeg($destination); break;
case 3: $simage = imagecreatefrompng($destination); break;
case 6: $simage = imagecreatefromwbmp($destination); break;
default: die("不支援的檔案類型");
}
imagecopy($nimage, $simage, 0, 0, 0, 0, $image_size[0], $image_size[1]);
imagefilledrectangle($nimage, 1, $image_size[1]-15, 80, $image_size[1], $white);
switch ($watertype) {
case 1: // 文字水印
imagestring($nimage, 2, 3, $image_size[1]-15, $waterstring, $black);
break;
case 2: // 圖片水印
$simage1 = imagecreatefromgif("xplore.gif");
imagecopy($nimage, $simage1, 0, 0, 0, 0, 85, 15);
imagedestroy($simage1);
break;
}
// 依原格式存回
switch ($iinfo[2]) {
case 1: imagejpeg($nimage, $destination); break; // GIF 轉存為 JPG
case 2: imagejpeg($nimage, $destination); break;
case 3: imagepng($nimage, $destination); break;
case 6: imagewbmp($nimage, $destination); break;
}
imagedestroy($nimage);
imagedestroy($simage);
imagettftext 支援 TTF 字型、中文、字體大小、旋轉、透明度。