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

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

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

ปรับปรุงล่าสุด 27 มิ.ย. 2566, 10:38   38 ครั้ง

จัดการรูปภาพพร้อมกันหลายพันภาพ ให้ง่ายขึ้นด้วยการประยุกต์คำสั่งต่อไปนี้

สำหรับเว็บไซต์ของคุณอาจเป็นเรื่องน่าปวดหัว เมื่อการออกแบบไซต์ของคุณเปลี่ยนไป คุณอาจต้องแก้ไขรูปภาพทั้งหมดของคุณ ตัวอย่างเช่น คุณอาจต้องแปลงรูปภาพทั้งหมดเป็นโทนสีเทาหรือปรับขนาดเป็น 50% ของขนาดดั้งเดิม คุณอาจต้องการบีบอัดหรือครอบตัดรูปภาพต่างๆ การดำเนินการนี้ด้วยตนเองใช้เวลานานและเกิดข้อผิดพลาดได้ง่าย แต่ด้วยความรู้ด้านการเขียนโปรแกรมเพียงเล็กน้อย ก็สามารถทำให้เป็นอัตโนมัติได้

 

GD (Graphic Draw) ใน PHP วิธีการใช้ไลบรารีนี้ในการจัดการรูปภาพ เช่น การปรับขนาด ครอบตัด หมุน หรือกรองรูปภาพ มีแนวทางดังนี้


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() ฟังก์ชัน

ฟังก์ชันทั้งหมดนี้เปิดโอกาสมากมายเพื่อให้การจัดการภาพง่ายขึ้นและประหยัดเวลาได้มากในที่สุด

ลิงค์ที่เกี่ยวข้อง:
GD (Graphic Draw) ใน PHP วิธีการใช้ไลบรารีนี้ในการจัดการรูปภาพ เช่น การปรับขนาด ครอบตัด หมุน หรือกรองรูปภาพ