PHP ระดับสูง > กราฟฟิกและภาพ
การสร้างภาพ
ขั้นตอนการสร้างภาพใน PHP มี 4 ขั้นตอน ดังนี้
- สร้าง canvas
- วาดรูปทรงหรือพิมพ์ข้อความบน canvas
- ส่งออกกราฟฟิกสุดท้าย
- ทำความสะอาดทรัพยากร
สคริปต์ตัวอย่าง string_graphic.php เป็นการเขียนข้อความและจัดอย่างอัตโนมัติบนพื้นที่ภาพที่เตรียมไว้
ภาพ 3.4.1 การวาดข้อความบนภาพที่กำหนด
การสร้าง Canvas
การเริ่มสร้างหรือเปลี่ยนภาพใน PHP จำเป็นต้องสร้าง identifier ของภาพ การทำสิ่งนี้มี 2 วิธีพื้นฐาน วิธีหนึ่งคือการสร้าง canvas เปล่า ซึ่งสามารถทำด้วยการเรียกฟังก์ชัน ImageCreate() เหมือนกับในสคริปต์นี้
$im = ImageCreate ($width, $height);
ต้องส่งผ่าน 2 พารามิเตอร์ไปยัง ImageCreate() พารามิเตอร์แรกคือ ความกว้างของภาพใหม่และพารามิเตอร์ที่ 2 คือ ความสูงของภาพใหม่ ฟังก์ชันนี้จะส่งออก identifier สำหรับภาพใหม่
อีกวิธีหนึ่ง คือ อ่านไฟล์ภาพที่สามารถกรอง ปรับขนาด หรือเพิ่มด้วยการเลือกใช้ฟังก์ชัน ImageCreate FromPNG(), ImageCreateFromJPEG() หรือ ImageCreateFromGIF() ขึ้นกับรูปแบบไฟล์ที่กำลังอ่าน แต่ละฟังก์ชันใช้ชื่อไฟล์เป็นพารามิเตอร์
$im = ImageCreateFromPNG ("baseimage.png");
การวาดหรือพิมพ์ข้อความบนภาพ
การวาดหรือพิมพ์ข้อความบนภาพมี 2 ขั้น
ขั้นแรก เลือกสีที่ต้องการวาด บนจอภาพคอมพิวเตอร์สีประกอบด้วยสัดส่วนต่างกันของสีแดง สีเขียว และสีน้ำเงิน รูปแบบภาพใช้จานสี (palette) ที่ประกอบด้วยชุดย่อยของส่วนประกอบที่เป็นไปได้ของสีหลักการใช้สีเพื่อวาดบนภาพต้องเพิ่มสีนี้เข้าสู่จานสีของภาพ และต้องทำกับทุกสีที่ต้องการใช้รวมถึงสีขาวและสีดำ
การเลือกสีสำหรับภาพให้เรียกฟังก์ชัน ImageColorAllocate() การกำหนดสีให้ส่งผ่าน identifier ของภาพและค่าสีแดง สีเขียว และสีน้ำเงิน (RGB) ที่ต้องการวาดไปยังฟังก์ชันนี้
ในสคริปต์ใช้ 5 สี คือ ขาว ดำ แดง เขียว และน้ำเงิน
$white = ImageColorAllocate ($im, 255, 255, 255);
$black = ImageColorAllocate ($im, 0, 0, 0);
$red = ImageColorAllocate ($im, 255, 0, 0);
$green = ImageColorAllocate ($im, 0, 255, 0);
$blue = ImageColorAllocate ($im, 0, 0, 255);
ฟังก์ชันนี้ส่งออก identifier ของสีที่สามารถใช้เข้าถึงสีต่อไป
ขั้นที่ 2 การวาดไปยังภาพ มีหลายฟังก์ชันต่างกัน ขึ้นกับความต้องการในการวาด เช่น เส้นตรง เส้นโค้ง รูปเหลี่ยม หรือข้อความ
โดยทั่วไปการวาดฟังก์ชันต้องการพารามิเตอร์ต่อไปนี้
- identifier ของภาพ
- พิกัดเริ่มต้น และพิกัดสิ้นสุดในบางครั้ง
- สี
- สารสนเทศของฟอนต์สำหรับในบางครั้ง
เริ่มต้นจากการวาดพื้นหลังสีดำด้วยการใช้ฟังก์ชัน ImageFill()
Imagefill($im, 0, 0, $black);
สำหรับสคริปต์ string_graphic.php สร้างภาพด้วย ImageFilledRectangle () ด้วยเรียงลำดับแต่ละสี โดยความสูงของแต่ละภาพเป็น 15 พิกเซล
<?php
// set for filled color
//
height
$step = 15;
// start x coordinator
$x = 10;
// set right end
$x1 = $width - 10;
// start y coordinator
$y = 0;
// start y coordinator
$y1 = $step;
for( $i = 1; $i <= 6; $i++)
{
if ($i == 1 || $i == 6)
$color = $green;
elseif ($i == 2 || $i == 5)
$color = $red;
else
$color = $blue;
// set next y coordinator
$y = $y1;
// set next height
$y1 = $y1 + $step;
// draw rectangle image
ImageFilledRectangle($im, $x, $y, $x1, $y1, $color);
}
?>
การเขียนข้อความบนภาพ
ImageString ($im, 4, 50, 150, "sales", $white);
ฟังก์ชัน ImageString () ใช้พารามิเตอร์ต่างไปเล็กน้อย ไวยากรณ์ของฟังก์ชันคือ
int imagestring (int im, int font, int x, int y, string s, int cal)
ฟังก์ชันนี้ใช้พารามิเตอร์คือ identifier ของภาพ ฟอนต์ พิกัด x และ y สำหรับตำแหน่งเริ่มต้นข้อความ ข้อความและสี
ฟอนต์เป็นตัวเลขระหว่าง 1 กับ 5 สิ่งนี้แสดงชุดฟอนต์ทางเลือกอื่น สามารถใช้ฟอนต์ True type หรือ Post Script type 1 ชุดฟอนต์แต่ละชุดตรงกับชุดของฟังก์ชัน
เหตุผลที่ดีสำหรับการใช้ชุดฟังก์ชันทางเลือกคือ ข้อความที่เขียนโดย ImageString () และ ฟังก์ชันที่เกี่ยวข้อง เช่น ImageChar() (เขียนตัวอักษรบนภาพ) เป็นอีกชื่อหนึ่ง ฟังก์ชัน Truetype และ PostScript สร้างข้อความแบบ anti-aliased
ส่งออกผลลัพธ์กราฟฟิก
ผลลัพธ์ของภาพสามารถแสดงโดยตรงกับ browser หรือ ไฟล์
ตัวอย่างนี้ ส่งผลลัพธ์ของภาพไปยัง browser โดยเป็นขั้นตอน 2 กระบวนการ ขั้นตอนแรกจำเป็นต้องบอก browser ว่ากำลังส่งผลลัพธ์เป็นภาพแทนที่ข้อความหรือ HTML ด้วยการใช้ฟังก์ชัน Header() เพื่อระบุประเภท MIME ของภาพ
header ("Content-type: image/png");
ตามปกติเมื่อดึงไฟล์ใน browser ประเภท MIME type เป็นสิ่งแรกที่แม่ข่ายเว็บส่ง สำหรับเพจ HTML หรือ PHP (หลังการประมวลผล) สิ่งแรกที่ส่งคือ
Content-type: text/html
สิ่งนี้บอก browser ให้แปลข้อมูลต่อไป
ในกรณีนี้ต้องบอก browser ว่ากำลังส่งภาพแทนที่ผลลัพธ์ HTML ตามปกติการใช้ฟังก์ชัน header()
หลังจากส่งข้อมูลส่วนหัว ส่งผลลัพธ์ข้อมูลภาพด้วยการเรียก
ImagePNG ($im);
นี่เป็นการส่งผลลัพธ์ไปยัง browser ในรูปแบบ PNG ถ้าต้องการส่งในรูปแบบต่างกัน ให้เรียก ImageJPEG () ถ้าการสนับสนุน JPEG ใช้ได้ หรือ ImageGIF() ถ้า GD เป็นเวอร์ชันเก่า รวมถึงต้องส่ง body ให้ตรงกันก่อนด้วย
header ("Content-type: image/jpeg");
หรือ สำหรับ GIF
header ("Content-type: image/gif");
ทางเลือกที่ 2 สามารถใช้ได้ คือ เขียนภาพเป็นไฟล์แทนที่ browser การทำแบบนี้ให้เพิ่มพารามิเตอร์ตัวเลือกที่ 2 กับ ImagePNG()
ImagePNG ($im, $filename);
ทำความสะอาด
เมื่อทำงานกับภาพเสร็จแล้วต้องส่งทรัพยากรที่ใช้กลับไปยังแม่ข่ายโดยการลบ identifier ด้วยการเรียก ImageDestroy ()
ImageDestroy ($im);
|