ตัวอย่างฟังก์ชั่น php ที่จะแนะนำต่อไปนี้ เป็นการใช้งาน php จัดการเกี่ยวกับรูปภาพ
เช่น การลดขนาดรูปภาพ หรือ resize อย่างการสร้าง thumbnail เป็นต้น
เริ่มต้นให้เราสร้างไฟล์ php เปล่าชื่อ gen_thumbnail.php
โค้ดตามนี้เลย ไฟล์นี้เราเอาไว้สำหรับ include เพื่อเรียกใช้งาน
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | <?php function createthumb( $name , $filename , $new_w , $new_h , $color_bg , $output_type , $show , $crop ){ list( $old_x , $old_y , $img_type )= getimagesize ( $name ); switch ( $img_type ) { case IMAGETYPE_JPEG: $src_img =imagecreatefromjpeg( $name ); $filename_base = basename ( $filename , ".jpg" ); break ; case IMAGETYPE_GIF: $src_img =imagecreatefromgif( $name ); $filename_base = basename ( $filename , ".gif" ); break ; case IMAGETYPE_PNG: $src_img =imagecreatefrompng( $name ); $filename_base = basename ( $filename , ".png" ); break ; } $src_ratio = $old_x / $old_y ; $dst_ratio = $new_w / $new_h ; if ( $crop ==1){ $thumb_w =( $old_x * $new_h )/ $old_y ; $thumb_h = $new_h ; $co_x = floor (( $new_w - $thumb_w )/2); $co_y =0; } else { if ( $old_x <= $new_w && $old_y <= $new_h ){ $thumb_w = $old_x ; $thumb_h = $old_y ; $co_x =0; $co_y =0; } elseif ( $dst_ratio > $src_ratio ){ $thumb_w =(int)( $new_h * $src_ratio ); $thumb_h = $new_h ; $co_x = floor (( $new_w - $thumb_w )/2); $co_y =0; } else { $thumb_w = $new_w ; $thumb_h =(int)( $new_w / $src_ratio ); $co_x =0; $co_y = floor (( $new_h - $thumb_h )/2); } } if ( strlen ( $color_bg )>=6){ if ( strlen ( $color_bg )==6){ $R_color =hexdec( substr ( $color_bg ,0,2)); $G_color =hexdec( substr ( $color_bg ,2,2)); $B_color =hexdec( substr ( $color_bg ,4,2)); } else { $R_color =hexdec( substr ( $color_bg ,1,2)); $G_color =hexdec( substr ( $color_bg ,3,2)); $B_color =hexdec( substr ( $color_bg ,5,2)); } } $dst_img =imagecreatetruecolor( $new_w , $new_h ); if ( strlen ( $color_bg )==0){ imagecolortransparent( $dst_img , $color_bg ); } else { $color_bg =imagecolorallocate( $dst_img , $R_color , $G_color , $B_color ); imagefill( $dst_img ,0,0, $color_bg ); } imagecopyresampled( $dst_img , $src_img , $co_x , $co_y , 0, 0, $thumb_w , $thumb_h , $old_x , $old_y ); if ( $output_type != "" ){ if ( $output_type == "gif" ){ $img_type =IMAGETYPE_GIF; $filename = $filename_base . ".gif" ; } elseif ( $output_type == "png" ){ $img_type =IMAGETYPE_PNG; $filename = $filename_base . ".png" ; } else { $img_type =IMAGETYPE_JPEG; $filename = $filename_base . ".jpg" ; } } switch ( $img_type ) { case IMAGETYPE_JPEG: if ( $show ==1){ header( 'Content-Type: image/jpeg' ); imagejpeg( $dst_img , null, 90); } else { imagejpeg( $dst_img , $filename ,90); } break ; case IMAGETYPE_GIF: if ( $show ==1){ header( 'Content-Type: image/gif' ); imagegif( $dst_img ); } else { imagegif( $dst_img , $filename ); } break ; case IMAGETYPE_PNG: if ( $show ==1){ header( 'Content-Type: image/png' ); imagepng( $dst_img ); } else { imagepng( $dst_img , $filename ); } break ; } imagedestroy( $dst_img ); imagedestroy( $src_img ); } ?> |
ตัวอย่างการใช้งาน
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?php include ( "gen_thumbnail.php" ); ?> <?php $cfg_thumb = (object) array ( "source" => "img/Dock.jpg" , // ตำแหน่งและชื่อไฟล์ต้นฉบับ "destination" => "thumbmypic1.jpg" , // ตำแแหน่งและชื่อไฟล์ที่สร้างใหม่ ถ้าเลือกสร้างเป็นไฟล์ใหม่ "width" =>100, // กำหนดความกว้างรูปใหม่ "height" =>100, // กำหนดความสูงรูปใหม่ "background" => "" , // กำหนดสีพื้นหลังรูปใหม่ (#FF0000) ถ้าไม่กำหนดและ เป็น gif หรือ png จะแสดงเป็นโปร่งใส "output" => "" , // กำหนดนามสกุลไฟล์ใหม่ jpg | gif หรือ png ถ้าไม่กำหนด จะใช้ค่าเริ่มต้นจากต้นฉบับ "show" =>0, // แสดงเป็นรูปภาพ หรือสร้างเป็นไฟล์ 0=สร้างเป็นไฟล์ | 1=แสดงเป็นรูปภาพ "crop" =>0 // กำหนด crop หรือ ไม่ 0=crop | 1=crop ); createthumb( $cfg_thumb ->source, $cfg_thumb ->destination, $cfg_thumb ->width, $cfg_thumb ->height, $cfg_thumb ->background, $cfg_thumb ->output, $cfg_thumb ->show, $cfg_thumb ->crop ); ?> |
มาดูการเอาไปใช้งานในแต่ละแบบ
1. การสร้างไฟล์ thumbnail หรือ resize แบบ crop
ตัวอย่างนี้เป็นการปรับขนาดรูปภาพ แล้วสร้างเป้นรูปใหม่ โดยจะ crop หรือตัด
ขนาดของรูปให้ได้ตามที่กำหนด โดยหากมีส่วนของรูปส่วนใหญ่ที่เกินขอบเขต
ก็จะถูกตัดออก
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?php include ( "gen_thumbnail.php" ); ?> <?php $cfg_thumb = (object) array ( "source" => "img/oldfile.jpg" , // ตำแหน่งและชื่อไฟล์ต้นฉบับ "destination" => "newfile.jpg" , // ตำแแหน่งและชื่อไฟล์ที่สร้างใหม่ ถ้าเลือกสร้างเป็นไฟล์ใหม่ "width" =>100, // กำหนดความกว้างรูปใหม่ "height" =>100, // กำหนดความสูงรูปใหม่ "background" => "" , // กำหนดสีพื้นหลังรูปใหม่ (#FF0000) ถ้าไม่กำหนดและ เป็น gif หรือ png จะแสดงเป็นโปร่งใส "output" => "" , // กำหนดนามสกุลไฟล์ใหม่ jpg | gif หรือ png ถ้าไม่กำหนด จะใช้ค่าเริ่มต้นจากต้นฉบับ "show" =>0, // แสดงเป็นรูปภาพ หรือสร้างเป็นไฟล์ 0=สร้างเป็นไฟล์ | 1=แสดงเป็นรูปภาพ "crop" =>1 // กำหนด crop หรือ ไม่ 0=crop | 1=crop ); createthumb( $cfg_thumb ->source, $cfg_thumb ->destination, $cfg_thumb ->width, $cfg_thumb ->height, $cfg_thumb ->background, $cfg_thumb ->output, $cfg_thumb ->show, $cfg_thumb ->crop ); ?> |
2. การเปลี่ยนไฟล์จาก jpg เป้น png
จะได้ไฟล์ newfile.png มีพื้นหลังเป็นสีขาว
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?php include ( "gen_thumbnail.php" ); ?> <?php $cfg_thumb = (object) array ( "source" => "img/oldfile.jpg" , // ตำแหน่งและชื่อไฟล์ต้นฉบับ "destination" => "newfile.png" , // ตำแแหน่งและชื่อไฟล์ที่สร้างใหม่ ถ้าเลือกสร้างเป็นไฟล์ใหม่ "width" =>100, // กำหนดความกว้างรูปใหม่ "height" =>100, // กำหนดความสูงรูปใหม่ "background" => "#FFFFFF" , // กำหนดสีพื้นหลังรูปใหม่ (#FF0000) ถ้าไม่กำหนดและ เป็น gif หรือ png จะแสดงเป็นโปร่งใส "output" => "png" , // กำหนดนามสกุลไฟล์ใหม่ jpg | gif หรือ png ถ้าไม่กำหนด จะใช้ค่าเริ่มต้นจากต้นฉบับ "show" =>0, // แสดงเป็นรูปภาพ หรือสร้างเป็นไฟล์ 0=สร้างเป็นไฟล์ | 1=แสดงเป็นรูปภาพ "crop" =>0 // กำหนด crop หรือ ไม่ 0=crop | 1=crop ); createthumb( $cfg_thumb ->source, $cfg_thumb ->destination, $cfg_thumb ->width, $cfg_thumb ->height, $cfg_thumb ->background, $cfg_thumb ->output, $cfg_thumb ->show, $cfg_thumb ->crop ); ?> |
3. การเปลี่ยนพื้นหลังไฟล์ gif และ png เป็นโปรงใส
กำหนด output เป็น gif หรือ png และกำหนด background เป็นค่าว่าง
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?php include ( "gen_thumbnail.php" ); ?> <?php $cfg_thumb = (object) array ( "source" => "img/oldfile.jpg" , // ตำแหน่งและชื่อไฟล์ต้นฉบับ "destination" => "newfile.gif" , // ตำแแหน่งและชื่อไฟล์ที่สร้างใหม่ ถ้าเลือกสร้างเป็นไฟล์ใหม่ "width" =>100, // กำหนดความกว้างรูปใหม่ "height" =>100, // กำหนดความสูงรูปใหม่ "background" => "" , // กำหนดสีพื้นหลังรูปใหม่ (#FF0000) ถ้าไม่กำหนดและ เป็น gif หรือ png จะแสดงเป็นโปร่งใส "output" => "gif" , // กำหนดนามสกุลไฟล์ใหม่ jpg | gif หรือ png ถ้าไม่กำหนด จะใช้ค่าเริ่มต้นจากต้นฉบับ "show" =>0, // แสดงเป็นรูปภาพ หรือสร้างเป็นไฟล์ 0=สร้างเป็นไฟล์ | 1=แสดงเป็นรูปภาพ "crop" =>0 // กำหนด crop หรือ ไม่ 0=crop | 1=crop ); createthumb( $cfg_thumb ->source, $cfg_thumb ->destination, $cfg_thumb ->width, $cfg_thumb ->height, $cfg_thumb ->background, $cfg_thumb ->output, $cfg_thumb ->show, $cfg_thumb ->crop ); ?> |
4. การแสดงรูปภาพโดยไม่ต้องบันทึกเป็นไฟล์ใหม่
กำหนด show=1
สมมติไฟล์เราชื่อ show_pic.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?php include ( "gen_thumbnail.php" ); ?> <?php $cfg_thumb = (object) array ( "source" => "img/oldfile.jpg" , // ตำแหน่งและชื่อไฟล์ต้นฉบับ "destination" => "show_pic.png" , // ตำแแหน่งและชื่อไฟล์ที่สร้างใหม่ ถ้าเลือกสร้างเป็นไฟล์ใหม่ "width" =>100, // กำหนดความกว้างรูปใหม่ "height" =>100, // กำหนดความสูงรูปใหม่ "background" => "" , // กำหนดสีพื้นหลังรูปใหม่ (#FF0000) ถ้าไม่กำหนดและ เป็น gif หรือ png จะแสดงเป็นโปร่งใส "output" => "png" , // กำหนดนามสกุลไฟล์ใหม่ jpg | gif หรือ png ถ้าไม่กำหนด จะใช้ค่าเริ่มต้นจากต้นฉบับ "show" =>1, // แสดงเป็นรูปภาพ หรือสร้างเป็นไฟล์ 0=สร้างเป็นไฟล์ | 1=แสดงเป็นรูปภาพ "crop" =>0 // กำหนด crop หรือ ไม่ 0=crop | 1=crop ); createthumb( $cfg_thumb ->source, $cfg_thumb ->destination, $cfg_thumb ->width, $cfg_thumb ->height, $cfg_thumb ->background, $cfg_thumb ->output, $cfg_thumb ->show, $cfg_thumb ->crop ); ?> |
เวลาเราเรียอกใช้งานไฟล์รูปภาพที่สร้างจาก php และการ resize
1 | < img src = "show_pic.php" > |
5. การส่งค่าเพื่อแสดงรูปภาพ url
วิธีนี้จะเป็นการประยุกต์แสดงรูปภาพที่เรามีอยู่แล้ว ออกมาในขนาดต่างๆ
โดยที่ไม่ต้องสร้างเป็นไฟล์เก็บไว้ ซึ่งจะกินพื้นที่จัดเก็บ ทำให้การกำหนดและเรียกใช้ไฟล์
รูปภาพยืดหยุ่น นำไปใช้งานได้หลากหลาย
เช่น เรามีภาพชื่อ oldpic.jpg ขนาด 800 x 1200
ต้องการเรียกใฟล์มาแสดง โดยแสดงไฟล์เป็นขนาด 100 x 100
สร้างไฟล์ชื่อ show_pic.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?php include ( "gen_thumbnail.php" ); ?> <?php $cfg_thumb = (object) array ( "source" => $_GET [ 'src' ], // ตำแหน่งและชื่อไฟล์ต้นฉบับ "destination" => $_GET [ 'dst' ], // ตำแแหน่งและชื่อไฟล์ที่สร้างใหม่ ถ้าเลือกสร้างเป็นไฟล์ใหม่ "width" => $_GET [ 'w' ], // กำหนดความกว้างรูปใหม่ "height" => $_GET [ 'h' ], // กำหนดความสูงรูปใหม่ "background" => $_GET [ 'bg' ], // กำหนดสีพื้นหลังรูปใหม่ (#FF0000) ถ้าไม่กำหนดและ เป็น gif หรือ png จะแสดงเป็นโปร่งใส "output" => $_GET [ 'output' ], // กำหนดนามสกุลไฟล์ใหม่ jpg | gif หรือ png ถ้าไม่กำหนด จะใช้ค่าเริ่มต้นจากต้นฉบับ "show" => $_GET [ 'show' ], // แสดงเป็นรูปภาพ หรือสร้างเป็นไฟล์ 0=สร้างเป็นไฟล์ | 1=แสดงเป็นรูปภาพ "crop" => $_GET [ 'crop' ] // กำหนด crop หรือ ไม่ 0=crop | 1=crop ); createthumb( $cfg_thumb ->source, $cfg_thumb ->destination, $cfg_thumb ->width, $cfg_thumb ->height, $cfg_thumb ->background, $cfg_thumb ->output, $cfg_thumb ->show, $cfg_thumb ->crop ); ?> |
เวลาเราเรียอกใช้งานไฟล์รูปภาพที่สร้างจาก php และการ resize
1 | < img src = "show_pic.php?src=oldpic.jpg&dst=&w=100&h=100&bg=ffffff&output=&show=1&crop=" > |
หรือแบบย่อ
1 | < img src = "show_pic.php?src=oldpic.jpg&w=100&h=100&bg=ffffff&show=1" > |
เท่านี้ก็ได้ฟังก์ชั่น จัดการเกี่ยวกับรูปภาพได้หลายรูแบบ และยังสามารถนำไป
ประยุกต์เพิ่มเติม ให้เข้าการใช้งานของแต่ละคนได้