<form action="upload.php" method="post" enctype="multipart/form-data"> <input type="file" name="image"> <input type="submit" value="上傳"> </form>
需要注意的是,表單的enctype屬性必須設置為multipart/form-data,以便支持文件上傳。
$uploadDir = 'uploads/'; mkdir($uploadDir);
創建了目錄之後,我們可以接著進行圖片上傳處理。
if ($_FILES['image']['error'] == UPLOAD_ERR_OK) { // 圖片上傳成功} else { // 圖片上傳失敗echo '圖片上傳失敗,請重試! '; }
需要注意的是,$_FILES['image']['error']是一個表示錯誤碼的變量,如果值為UPLOAD_ERR_OK表示上傳成功。
if (move_uploaded_file($_FILES['image']['tmp_name'], $uploadDir . $_FILES['image']['name'])) { // 圖片移動成功} else { // 圖片移動失敗echo '圖片移動失敗,請重試! '; }
$srcImage = imagecreatefromjpeg($uploadDir . $_FILES['image']['name']); $dstImage = imagecreatetruecolor(200, 200); imagecopyresized($dstImage, $srcImage, 0, 0, 0, 0, 200, 200, imagesx($srcImage), imagesy($srcImage)); imagejpeg($dstImage, $uploadDir . 'thumbnail.jpg'); imagedestroy($srcImage); imagedestroy($dstImage);
在這個例子中,我們使用imagecreatefromjpeg函數從原始圖片創建圖像資源,然後使用imagecreatetruecolor函數創建一個指定大小的目標圖像,最後通過imagecopyresized函數完成縮放。
$srcImage = imagecreatefromjpeg($uploadDir . $_FILES['image']['name']); $dstImage = imagecreatetruecolor(200, 200); imagecopyresampled($dstImage, $srcImage, 0, 0, 100, 100, 200, 200, 200, 200); imagejpeg($dstImage, $uploadDir . 'cropped.jpg'); imagedestroy($srcImage); imagedestroy($dstImage);
與縮放不同的是,裁剪操作使用了imagecopyresampled函數,其作用是從源圖像中提取指定區域並生成目標圖像。
$srcImage = imagecreatefromjpeg($uploadDir . $_FILES['image']['name']); $watermarkImage = imagecreatefrompng('watermark.png'); imagecopy($srcImage, $watermarkImage, 10, 10, 0, 0, imagesx($watermarkImage), imagesy($watermarkImage)); imagejpeg($srcImage, $uploadDir . 'watermarked.jpg'); imagedestroy($srcImage); imagedestroy($watermarkImage);
我們通過imagecopy函數將水印圖像拷貝到原始圖像上,最後使用imagejpeg保存帶水印的圖片。