ไลบรารี GD ใน PHP และแสดงวิธีใช้ฟังก์ชันเหล่านี้เพื่อทำให้ชีวิตของคุณง่ายขึ้น

ไลบรารี GD ใน PHP และแสดงวิธีใช้ฟังก์ชันเหล่านี้เพื่อทำให้ชีวิตของคุณง่ายขึ้น
ปรับปรุงล่าสุด 27 มิ.ย. 2566, 10:38 38 ครั้งเรียบเรียงโดย กฤติเดช ฉายจรุง
จัดการรูปภาพพร้อมกันหลายพันภาพ ให้ง่ายขึ้นด้วยการประยุกต์คำสั่งต่อไปนี้
สำหรับเว็บไซต์ของคุณอาจเป็นเรื่องน่าปวดหัว เมื่อการออกแบบไซต์ของคุณเปลี่ยนไป คุณอาจต้องแก้ไขรูปภาพทั้งหมดของคุณ ตัวอย่างเช่น คุณอาจต้องแปลงรูปภาพทั้งหมดเป็นโทนสีเทาหรือปรับขนาดเป็น 50% ของขนาดดั้งเดิม คุณอาจต้องการบีบอัดหรือครอบตัดรูปภาพต่างๆ การดำเนินการนี้ด้วยตนเองใช้เวลานานและเกิดข้อผิดพลาดได้ง่าย แต่ด้วยความรู้ด้านการเขียนโปรแกรมเพียงเล็กน้อย ก็สามารถทำให้เป็นอัตโนมัติได้
GD (Graphic Draw) ใน PHP วิธีการใช้ไลบรารีนี้ในการจัดการรูปภาพ เช่น การปรับขนาด ครอบตัด หมุน หรือกรองรูปภาพ มีแนวทางดังนี้
- การสร้างรูปภาพด้วย PHP GD
- หมุน ปรับขนาด ครอบตัด และพลิกภาพ
- พลิกภาพ
- การใช้ตัวกรองกับรูปภาพ
- ฟังก์ชันการจัดการรูปภาพที่มีประโยชน์อื่นๆ
- รับและตั้งค่าสีของพิกเซลเฉพาะ
- การปรับขนาดรูปภาพทั้งหมดในไดเร็กทอรี
- ใช้ตัวกรองสีเทาและความคมชัดในแต่ละภาพในไดเร็กทอรี
Graphic Draw
- PHP สามารถทำได้มากกว่าแค่ให้บริการ HTML แก่ผู้เข้าชม ตัวอย่างเช่น มีความสามารถในการจัดการรูปภาพ ไม่เพียงเท่านั้น คุณยังสามารถสร้างรูปภาพของคุณเองตั้งแต่เริ่มต้น จากนั้นบันทึกหรือให้บริการแก่ผู้ใช้
- PHP สามารถจัดการกับความต้องการจัดการภาพพื้นฐานเกือบทั้งหมดของคุณโดยใช้ไลบรารี GD (Graphic Draw)
การสร้างรูปภาพด้วย PHP GD
- ขั้นตอนแรกในการจัดการกับรูปภาพโดยใช้ PHP คือการโหลดลงในหน่วยความจำเป็นทรัพยากรรูปภาพ ซึ่งสามารถทำได้โดยใช้ฟังก์ชันที่แตกต่างกันสำหรับรูปแบบต่างๆ ฟังก์ชันทั้งหมดนี้มีชื่อคล้ายกันมาก ดังนั้นจึงง่ายต่อการจดจำ
สร้างภาพใหม่
- ฟังก์ชัน imagecreatetruecolor() จะเป็นประโยชน์หากคุณไม่มีแหล่งที่มาของภาพต้นฉบับที่คุณต้องการจัดการ
- รับพารามิเตอร์ จำนวนเต็มสองตัว: ความกว้างและความสูง
- มันจะส่งคืนทรัพยากรรูปภาพหากทุกอย่างเป็นไปตามแผน
- ทรัพยากรภาพที่ส่งคืนนั้นเป็นภาพสีดำที่มี ความกว้างและความสูง ตามที่ระบุ
โหลดไฟล์รูปภาพ
- หากคุณวางแผนที่จะจัดการรูปภาพที่เก็บไว้ที่ไหนสักแห่ง คุณจะได้รับประโยชน์จากการใช้ฟังก์ชัน เช่น
- imagecreatefromjpeg()
- imagecreatefrompng()
- imagecreatefromgif()
- สิ่งเหล่านี้จะสร้างทรัพยากรรูปภาพพร้อมข้อมูลทั้งหมดจากไฟล์รูปภาพที่โหลด
- ฟังก์ชันเหล่านี้ยอมรับพารามิเตอร์เดียว ระบุตำแหน่งของรูปภาพที่โหลดเป็น URL หรือ เป็นเส้นทางของไฟล์
สร้างรูปภาพจากสตริง
- ไลบรารี GD ยังให้คุณสร้างรูปภาพจากสตริงโดยใช้ imagecreatefromstring()
- ฟังก์ชันใน PHP จำไว้ว่าคุณจะต้องใช้ base64_decode() กับสตริงที่กำหนด imagecreatefromstring() ก่อน
- ฟังก์ชันนี้สามารถตรวจจับได้โดยอัตโนมัติว่าประเภทภาพเป็น JPG, PNG, GIF หรือรูปแบบอื่นที่รองรับ
หมุน ปรับขนาด ครอบตัด และพลิกภาพ
- การดำเนินการทั่วไปบางอย่างที่คุณอาจต้องการดำเนินการกับทรัพยากรรูปภาพ ได้แก่
- การหมุน
- การปรับขนาด
- การครอบตัด
- การพลิก
การหมุน
- คุณสามารถหมุนรูปภาพที่คุณโหลดไว้แล้วในสคริปต์ได้โดยใช้ imagerotate() ฟังก์ชัน
- มันจะหมุนภาพในมุมที่กำหนดโดยใช้ศูนย์กลางของภาพเป็นจุดศูนย์กลางของการหมุน มุมมีไว้เป็นค่าทศนิยม และ PHP ถือว่าเป็นค่าองศาสำหรับการหมุน
- บางครั้งภาพที่หมุนจะมีขนาดต่างกันเมื่อเปรียบเทียบกับภาพต้นฉบับ ซึ่งหมายความว่าคุณจะพบกับพื้นที่ว่างหลังจากการหมุน พารามิเตอร์ที่สามของ imagerotate()
- ฟังก์ชันสามารถใช้เพื่อระบุสีพื้นหลังของพื้นที่ว่างหลังจากการหมุน
Scaling
- การปรับขนาดรูปภาพโดยใช้ไลบรารี GD ทำได้ง่ายมาก คุณเพียงแค่ส่งทรัพยากรรูปภาพรวมถึงความกว้างและความสูงไปยังimagescale()ฟังก์ชัน หากคุณละเว้นความสูง GD จะปรับขนาดรูปภาพเป็นความกว้างที่ระบุโดยที่ยังคงอัตราส่วนไว้
- คุณยังสามารถระบุโหมดสำหรับการปรับขนาดภาพ สามารถตั้งค่าเป็นIMG_NEAREST_NEIGHBOUR, IMG_BILINEAR_FIXED, IMG_BICUBICฯลฯ สิ่งสำคัญอย่างหนึ่งที่คุณต้องจำไว้ก็คือ ฟังก์ชันนี้จะส่งคืนแหล่งที่มาของรูปภาพที่ปรับขนาดใหม่ แทนที่จะแก้ไขต้นฉบับ
การครอบตัด
- คุณสามารถครอบตัดทรัพยากรรูปภาพใดๆ ก็ได้โดยใช้ imagecrop()
- พารามิเตอร์แรก คือ ทรัพยากรรูปภาพต้นฉบับ
- พารามิเตอร์ที่สอง คือ อาร์เรย์ที่เชื่อมโยงซึ่งมีคีย์ x, y, width, height ระบุตำแหน่ง และ ขนาดของหน้าต่างการครอบตัด
พลิกภาพ
- สามารถพลิกภาพในแนวนอน แนวตั้ง หรือทั้งสองทิศทางได้
- โดยใช้ imageflip() ฟังก์ชัน
- ยอมรับทรัพยากรรูปภาพที่คุณต้องการพลิก ดังนี้
- พารามิเตอร์แรก คือ โหมดพลิก
- พารามิเตอร์ที่สอง สามารถตั้งค่าโหมดพลิกเป็น
- IMG_FLIP_HORIZONTAL,
- IMG_FLIP_VERTICAL,
- IMG_FLIP_BOTH

- ภาพซ้ายบนในภาพด้านบนเป็นต้นฉบับ
- ภาพซ้ายล่างสร้าง โดยใช้ IMG_FLIP_VERTICAL
- ภาพขวาบนสร้าง โดยใช้ IMG_FLIP_HORIZONTAL
- ภาพขวาล่างสร้าง โดย IMG_FLIP_BOTH
การใช้ตัวกรองกับรูปภาพ
- GD ยังมี imagefilter() ฟังก์ชันที่มีประโยชน์มาก
- สามารถใช้ตัวกรองกับทรัพยากรรูปภาพต่างๆ ที่โหลด โดยใช้ฟังก์ชันจากรูปภาพก่อนหน้า
- ฟังก์ชันนี้สามารถรับพารามิเตอร์ต่างๆ ขึ้นอยู่กับตัวกรองที่คุณใช้
สำหรับผู้เริ่มต้น ให้ระบุทรัพยากรรูปภาพและชื่อของตัวกรองที่คุณต้องการใช้ คุณสามารถตั้งค่าเป็นหนึ่งใน 12 ประเภทตัวกรองที่กำหนด ไว้ล่วงหน้าที่กล่าวถึงในเอกสาร

ตัวกรองบางตัว เช่น NEGATE, GRAYSCALE ไม่ต้องการข้อมูล เพิ่มเติมใด EDGE_DETECT , EMBOSS ฟิลเตอร์ อื่นๆ เช่น
- สามารถ ยอมรับ พารามิเตอร์ เพิ่มเติม ซึ่งระบุ ระดับความสว่าง คอนทราสต์ หรือ ความเรียบของภาพ BRIGHTNESS สุดท้าย
- พารามิเตอร์อนุญาตให้คุณระบุพารามิเตอร์เพิ่มเติม สองตัว
- ขนาดบล็อก
- โหมดของพิกเซล
- สุดท้ายตัวกรองจะยอมรับพารามิเตอร์ 4 ตัว ซึ่งกำหนดค่าสำหรับส่วนประกอบ
- สีแดง
- เขียว
- น้ำเงิน
- รวมทั้งช่องสัญญาณอัลฟ่า
- CONTRAST
- SMOOT
- HPIXELATE
- COLORIZE
ฟังก์ชันการจัดการรูปภาพที่มีประโยชน์อื่นๆ
- นอกจากนี้ คุณควรทราบเกี่ยวกับฟังก์ชัน GD ทั่วไปอื่นๆ ที่มีประโยชน์เป็นระยะๆ
รับขนาดภาพ
- คุณสามารถกำหนดความกว้างและความสูงของทรัพยากรรูปภาพได้โดยใช้ฟังก์ชันimagesx()และimagesy()
- ฟังก์ชั่นอื่นที่เรียกว่าgetimagesize()สามารถใช้เพื่อรับความกว้างและความสูงของภาพพร้อมกับประเภทของภาพ
- ฟังก์ชันนี้ส่งคืนอาร์เรย์ที่มีองค์ประกอบที่ระบุความกว้าง ความสูง และรูปแบบของรูปภาพ สององค์ประกอบแรกของอาร์เรย์อธิบายความกว้างและความสูง และองค์ประกอบที่สามประกอบด้วยค่าคงที่ที่ระบุรูปแบบไฟล์: หนึ่งในIMAGETYPE_PNG, IMAGETYPE_GIF, ฯลฯ
บันทึกภาพ
- เมื่อคุณทำการเปลี่ยนแปลงทั้งหมดที่ต้องการกับรูปภาพแล้ว คุณมักจะต้องการส่งออกไปยังเบราว์เซอร์หรือบันทึกเป็นไฟล์ ไม่ว่าในกรณีใด คุณจะต้องใช้หนึ่งในฟังก์ชันเอาต์พุต GD เช่น imagejpeg(), imagepng(), imagegif()
- หรือ คุณจะส่งต่อทรัพยากรรูปภาพของคุณไปยังหนึ่งในฟังก์ชันเอาต์พุตเหล่านี้ และถ้าคุณต้องการบันทึกรูปภาพลงในไฟล์ คุณจะต้องระบุชื่อไฟล์ด้วย
- คุณยังสามารถควบคุมคุณภาพของภาพที่ส่งออกได้โดยใช้พารามิเตอร์ตัวเลือกที่สาม ขึ้นอยู่กับประเภทของภาพ
รับและตั้งค่าสีของพิกเซลเฉพาะ
- มีฟังก์ชั่นมากมายใน PHP ที่คุณสามารถใช้เพื่อรับหรือตั้งค่าสีของแต่ละพิกเซลในตำแหน่งเฉพาะในภาพ ขั้นตอนแรกคือการสร้างทรัพยากรรูปภาพที่มีฟังก์ชันต่างๆimagecreatefrompng()เช่น
- หลังจากนั้น คุณสามารถใช้ฟังก์ชันimagecolorat($image, $x, $y) เพื่อรับดัชนีสีของพิกเซลที่กำหนด ตำแหน่งของพิกเซลถูกกำหนดโดยพารามิเตอร์ที่สองและสามในฟังก์ชัน คุณจะได้รับค่า RGB ของพิกเซลเป็นจำนวนเต็มหากเรียกใช้ฟังก์ชันนี้บนภาพสีจริง ตอนนี้ คุณสามารถใช้ bitshifting และ masking เพื่อรับส่วนประกอบสีต่างๆ หรือใช้ฟังก์ชันในตัวอื่นที่เรียกimagecolorsforindex($image, $color)ว่าสีของพิกเซลที่ตำแหน่งใดตำแหน่งหนึ่งสามารถตั้งค่าได้โดยใช้imagesetpixel($image, $x, $y, $color)ฟังก์ชัน
การแทนที่สีในภาพด้วย PHP
- คุณสามารถแทนที่สีหนึ่งด้วยสีอื่นใน PHP โดยใช้แนวคิดที่เราได้เรียนรู้ข้างต้น
- คุณภาพของผลลัพธ์จะแตกต่างกันไปในแต่ละภาพ ตามกฎทั่วไป ความแตกต่างของสีที่น้อยลงหมายถึงการเปลี่ยนที่ดีกว่า สีทึบสามารถแทนที่ได้อย่างมีประสิทธิภาพมากโดยใช้วิธีนี้
- ลองเขียนโค้ดเพื่อแทนที่สีในภาพต่อไปนี้
โค้ดด้านบนใช้ฟังก์ชันจากส่วนก่อนหน้าเพื่อรับและตั้งค่าสี โปรดทราบว่าเรากำลังทำการจับคู่สีที่แน่นอน ซึ่งอาจส่งผลให้เกิดสิ่งประดิษฐ์บางอย่างเนื่องจากพิกเซลอาจมีสีแตกต่างกันเล็กน้อยรอบๆ ขอบเขต เรายังสามารถหลีกเลี่ยงการเรียกใช้ฟังก์ชันimagecolorsforindex()เมื่อจับคู่แบบตรงทั้งหมด อย่างไรก็ตาม การมีส่วนประกอบของสีที่แยกจากกันทำให้คุณสามารถแนะนำค่าความคลาดเคลื่อนบางอย่างในระบบและให้ผลลัพธ์ที่ดีขึ้นในบางสถานการณ์ นี่คือภาพสุดท้ายที่มีการเปรียบเทียบและการเปลี่ยนสีที่แน่นอน
การปรับขนาดรูปภาพทั้งหมดในไดเร็กทอรี
- มาใช้ความรู้ที่เราได้รับมาเพื่อทำสิ่งที่เป็นประโยชน์กันเถอะ ในส่วนนี้ เราจะปรับขนาดภาพ JPEG ทั้งหมดในไดเร็กทอรีเฉพาะให้มีความกว้าง 640 พิกเซล ความสูงจะถูกคำนวณโดยอัตโนมัติตามขนาดของภาพต้นฉบับ
- เราจะบันทึกภาพที่ปรับขนาดแล้วในโฟลเดอร์ใหม่ที่ชื่อว่าResize รูปภาพต้นฉบับทั้งหมดในกรณีนี้มีขนาดเท่ากัน แต่โค้ดจะทำงานได้อย่างถูกต้องกับรูปภาพที่มีขนาดและอัตราส่วนภาพต่างกัน

glob() ในโค้ดข้างต้น เราเริ่มต้นด้วยการใช้ฟังก์ชัน glob() เพื่อค้นหาภาพทั้งหมดที่มี นามสกุล .jpg ในไดเร็กทอรีชื่อ Nature ไฟล์รูปภาพถูกจัดเก็บไว้ในอาร์เรย์ และเราจะวนซ้ำทีละไฟล์
- เนื่องจากรูปภาพทั้งหมดที่เราต้องการปรับขนาดเป็น JPEG เราจึงใช้ฟังก์ชัน imagecreatefromjpeg()
- โหลดลงในสคริปต์ ฟังก์ชัน imagescale() ใช้เพื่อปรับขนาดภาพให้มีความกว้างเฉพาะ ในกรณีของเรา คือ 640 พิกเซล เราไม่ได้ระบุความสูงที่แน่นอน ดังนั้นความสูงจะถูกคำนวณโดยอัตโนมัติ
- ไฟล์ภาพต้นฉบับแต่ละไฟล์มี -1920x1080 ต่อท้ายชื่อไฟล์เพื่อระบุขนาด เราใช้str_replace()ชื่อไฟล์เดิมและแทนที่-1920X1080 ด้วยขนาดภาพใหม่
- สุดท้าย เราบันทึกภาพที่ปรับขนาดแล้วไว้ในโฟลเดอร์ชื่อ Resize พร้อมชื่อไฟล์ใหม่ คุณยังสามารถส่งพารามิเตอร์ที่สามไปยัง imagejpeg() ฟังก์ชันเพื่อกำหนดคุณภาพของไฟล์รูปภาพที่บันทึกไว้ หากละเว้นพารามิเตอร์ที่สาม รูปภาพจะถูกบันทึกด้วยคุณภาพเริ่มต้นที่ 75
ใช้ตัวกรองสีเทาและความคมชัดในแต่ละภาพในไดเร็กทอรี
- ครั้งนี้ เราจะใช้ฟิลเตอร์ที่แตกต่างกันสองแบบในแต่ละภาพในไดเร็กทอรีของเรา
- และบันทึกผลลัพธ์สุดท้ายในไดเร็กทอรีอื่นโดยไม่ทำการเปลี่ยนแปลงใดๆ กับ ชื่อไฟล์
- มาดูโค้ดกัน แล้วฉันจะอธิบายว่าแต่ละฟังก์ชันทำหน้าที่อะไรในภายหลัง

- อย่างที่คุณเห็น เราโหลดรูปภาพจาก ไดเร็กทอรี Nature เหมือนกับที่เราทำในตัวอย่างที่แล้ว อย่างไรก็ตาม เราจะใช้ imagefilter() ฟังก์ชันนี้เพื่อใช้ตัวกรองกับทรัพยากรรูปภาพที่โหลด
- สังเกตว่า imagefilter() แก้ไขภาพต้นฉบับและส่งคืนTRUE หรือ FALSE ขึ้นอยู่กับความสำเร็จหรือความล้มเหลวของการดำเนินการ ซึ่งแตกต่างจาก imagescale() ฟังก์ชันที่เราใช้ในส่วนก่อนหน้า ซึ่ง ส่งคืนทรัพยากรรูปภาพที่ปรับขนาด
- สิ่งสำคัญอีกอย่างที่ต้องจำไว้ก็คือตัวกรองคอนทราสต์ยอมรับค่าตั้งแต่ -100 ถึง 100 ค่าลบบ่งบอกถึงคอนทราสต์ที่มากขึ้น และค่าบวกบ่งบอกถึงคอนทราสต์ที่น้อยลง ตรงกันข้ามกับที่หลายคนคาดคิด! ค่า 0 จะทำให้รูปภาพไม่เปลี่ยนแปลง
- ในทางกลับกัน ตัวกรองความสว่างมีขีดจำกัดขั้นต่ำและสูงสุดที่ -255 และ 255 ค่าลบในกรณีนี้หมายถึงความสว่างขั้นต่ำ และค่าบวกหมายถึงความสว่างสูงสุด
- เราได้ชื่อไฟล์จากพาธของไฟล์โดยใช้basename()ฟังก์ชัน จากนั้นบันทึกภาพโดยใช้ imagejpeg() ฟังก์ชัน
ความคิดสุดท้าย จุดประสงค์ของบทช่วยสอนนี้คือเพื่อให้คุณคุ้นเคยกับไลบรารี GD ใน PHP และแสดงวิธีใช้ฟังก์ชันเหล่านี้เพื่อทำให้ชีวิตของคุณง่ายขึ้น คุณสามารถใช้ตัวอย่างที่ส่วนท้ายของบทช่วยสอนเพื่อเป็นแนวทางในการเขียนสคริปต์การจัดการภาพของคุณเอง ตัวอย่างเช่น คุณสามารถปรับขนาดรูปภาพได้ก็ต่อเมื่อรูปภาพนั้นกว้างกว่าขีดจำกัดที่กำหนดเท่านั้น โดยกำหนดความกว้างโดยใช้ imagesx() ฟังก์ชัน
ฟังก์ชันทั้งหมดนี้เปิดโอกาสมากมายเพื่อให้การจัดการภาพง่ายขึ้นและประหยัดเวลาได้มากในที่สุด
ติดต่อสอบถาม
ฝ่ายปฏิบัติงาน / ฝ่ายลูกค้าสัมพันธ์
ฝ่ายปฏิบัติงาน โทร 0894222350 ฝ่ายลูกค้าสัมพันธ์ โทร 0881597444