หากคุณคุ้นเคยกับไลบรารี GD ของ PHP การทำความเข้าใจบทความนี้ก็ไม่ใช่เรื่องยาก!
<?php
/************************************************* **** *******************************
คำอธิบายพารามิเตอร์:
$max_file_size: อัปโหลดขีดจำกัดขนาดไฟล์ หน่วย BYTE
$destination_folder: อัพโหลดเส้นทางไฟล์
$ลายน้ำ: ไม่ว่าจะเพิ่มลายน้ำหรือไม่ (1 หมายถึงการเพิ่มลายน้ำ ส่วนอื่นๆ หมายถึงไม่เพิ่มลายน้ำ)
;
1. ลบเครื่องหมาย ; หน้าบรรทัด "extension=php_gd2.dll" ในไฟล์ PHP.INI เนื่องจากเราจำเป็นต้องใช้ไลบรารี GD
2. เปลี่ยน extension_dir = เป็นไดเร็กทอรีที่ php_gd2.dll ของคุณตั้งอยู่
************************************************** * ******************************/
//อัพโหลดรายการประเภทไฟล์
$uptypes=อาร์เรย์(
'รูปภาพ/JPG',
'รูปภาพ/jpeg',
'รูปภาพ/png',
'รูปภาพ/pjpeg',
'รูปภาพ/gif',
'รูปภาพ/bmp',
'รูปภาพ/x-png'
);
$max_file_size=2000000; // จำกัดขนาดไฟล์อัพโหลด, หน่วย BYTE
$destination_folder="uploadimg/"; //อัพโหลดไฟล์พาธ
$watermark=1; // ไม่ว่าจะเพิ่มลายน้ำ (1 หมายถึงการเพิ่มลายน้ำ ส่วนอื่นๆ หมายถึงไม่เพิ่มลายน้ำ);
$watertype=1; // ประเภทลายน้ำ (1 คือข้อความ, 2 คือรูปภาพ)
$waterposition=1; // ตำแหน่งลายน้ำ (1 คือมุมซ้ายล่าง, 2 คือมุมขวาล่าง, 3 คือมุมซ้ายบน, 4 คือมุมขวาบน, 5 อยู่ตรงกลาง);
$waterstring=" http://www.xplore.cn/ "; // สตริงลายน้ำ
$waterimg="xplore.gif"; //ภาพลายน้ำ
$imgpreview=1; // ไม่ว่าจะสร้างภาพตัวอย่าง (1 หมายถึงสร้างแล้ว ส่วนอื่นๆ จะไม่สร้าง);
$imgpreviewsize=1/2; //อัตราส่วนภาพขนาดย่อ
-
<html>
<หัว>
<title>โปรแกรมอัพโหลดรูปภาพ ZwelL</title>
<style type="text/css">
-
ร่างกาย
-
ขนาดตัวอักษร: 9pt;
-
ป้อนข้อมูล
-
สีพื้นหลัง: #66CCFF;
เส้นขอบ: 1px สิ่งที่ใส่เข้าไป #CCCCCC;
-
-
</สไตล์>
</หัว>
<ร่างกาย>
<form enctype="multipart/form-data" method="post" name="upform">
อัพโหลดไฟล์:
<input name="upfile" type="file">
<input type="submit" value="อัพโหลด"><br>
ประเภทไฟล์ที่อนุญาตให้อัพโหลดคือ:<?=implode(', ',$uptypes)?>
/แบบฟอร์ม>
<?php
ถ้า ($_SERVER['REQUEST_METHOD'] == 'POST')
-
ถ้า (!is_uploaded_file($_FILES["upfile"][tmp_name]))
//มีไฟล์อยู่หรือไม่?
-
echo "ไม่มีรูปภาพนี้!";
ออก;
}
$file = $_FILES["อัพไฟล์"];
if($max_file_size < $file["ขนาด"])
//ตรวจสอบขนาดไฟล์
-
echo "ไฟล์มีขนาดใหญ่เกินไป!";
ออก;
}
if(!in_array($file["type"], $uptypes))
//ตรวจสอบประเภทไฟล์
-
echo "ประเภทไฟล์ไม่ตรงกัน!".$file["type"];
ออก;
}
ถ้า(!file_exists($destination_folder))
-
mkdir($destination_folder);
}
$filename=$file["tmp_name"];
$image_size = getimagesize($ชื่อไฟล์);
$pinfo=pathinfo($file["ชื่อ"]);
$ftype=$pinfo['ส่วนขยาย'];
$destination = $destination_folder.time()".".$ftype;
ถ้า (file_exists($destination) && $overwrite != true)
-
echo "มีไฟล์ชื่อเดียวกันนี้อยู่แล้ว";
ออก;
}
if(!move_uploaded_file ($ชื่อไฟล์, $ปลายทาง))
-
echo "เกิดข้อผิดพลาดในการย้ายไฟล์";
ออก;
}
$pinfo=pathinfo($ปลายทาง);
$fname=$pinfo[ชื่อฐาน];
echo " <font color=red>อัพโหลดสำเร็จแล้ว</font><br>ชื่อไฟล์: <font color=blue>".$destination_folder.$fname"</font><br>";
echo "ความกว้าง:".$image_size[0];
echo "ความยาว:".$image_size[1];
echo "<br> ขนาด:".$file["size"]." bytes";
if($watermark==1)
-
$iinfo=getimagesize($destination,$iinfo);
$nimage=imagecreatetruecolor($image_size[0],$image_size[1]);
$white=imagecolorallocate($nimage,255,255,255);
$black=imagecolorallocate($nimage,0,0,0);
$red=imagecolorallocate($nimage,255,0,0);
imagefill($nimage,0,0,$white);
สวิตช์ ($iinfo[2])
-
กรณีที่ 1:
$simage =imagecreatefromgif($ปลายทาง);
หยุดพัก;
กรณีที่ 2:
$simage =imagecreatefromjpeg($ปลายทาง);
หยุดพัก;
กรณีที่ 3:
$simage =imagecreatefrompng($ปลายทาง);
หยุดพัก;
กรณีที่ 6:
$simage =imagecreatefromwbmp($ปลายทาง);
หยุดพัก;
ค่าเริ่มต้น:
die("ประเภทไฟล์ที่ไม่รองรับ";
ออก;
}
สำเนารูปภาพ($nimage,$simage,0,0,0,0,$image_size[0],$image_size[1]);
imagefilledrectangle($nimage,1,$image_size[1]-15,80,$image_size[1],$white);
สวิตช์($watertype)
-
กรณีที่ 1: //เพิ่มสตริงลายน้ำ
สตริงรูปภาพ($nimage,2,3,$image_size[1]-15,$waterstring,$black);
หยุดพัก;
กรณีที่ 2: //เพิ่มภาพลายน้ำ
$simage1 =imagecreatefromgif("xplore.gif";
คัดลอกรูปภาพ($nimage,$simage1,0,0,0,0,85,15);
imagedestroy($simage1);
หยุดพัก;
}
สวิตช์ ($iinfo[2])
-
กรณีที่ 1:
//imagegif($nimage, $destination);
imagejpeg($nimage, $destination);
หยุดพัก;
กรณีที่ 2:
imagejpeg($nimage, $destination);
หยุดพัก;
กรณีที่ 3:
imagepng($nimage, $destination);
หยุดพัก;
กรณีที่ 6:
imagewbmp($nimage, $destination);
//imagejpeg($nimage, $destination);
หยุดพัก;
}
//เขียนทับไฟล์ต้นฉบับที่อัพโหลด
imagedestroy($nimage);
imagedestroy($simage);
}
ถ้า($imgpreview==1)
-
echo "<br>ตัวอย่างรูปภาพ:<br>";
echo "<img src="".$destination"" width=".($image_size[0]*$imgpreviewsize)" height=".($image_size[1]*$imgpreviewsize);
echo " alt="ภาพตัวอย่าง:rชื่อไฟล์:".$destination"rเวลาในการอัพโหลด:">";
-
-
-
</ร่างกาย>
</html>
สุดท้ายนี้ ฉันคิดว่าจำเป็นต้องพูดถึงหลักการของลายน้ำให้กับรูปภาพ:
การรับข้อมูลไฟล์ที่อัปโหลด การสร้างภาพที่มีสีจริง การกำหนดโทนสี และการเติมรูปภาพ
สร้างกราฟิกโดยตัดสินประเภทไฟล์ จากนั้นคัดลอกไปยังกราฟิกที่สร้างขึ้นในตอนแรก กรอกข้อมูลและสร้างสี่เหลี่ยมพร้อมที่จะเขียนลงใน imagestring() หรือ
โปรแกรมรูปภาพต้นฉบับเพื่อกำหนดประเภทลายน้ำ: อันหนึ่งคือสตริง อีกอย่างคือเพิ่มวัตถุกราฟิกไว้ด้านบน