ตัวอย่างฟังก์ชั่น php ที่จะแนะนำต่อไปนี้ เป็นการใช้งาน php จัดการเกี่ยวกับรูปภาพ
เช่น การลดขนาดรูปภาพ หรือ resize อย่างการสร้าง thumbnail เป็นต้น
เริ่มต้นให้เราสร้างไฟล์ php เปล่าชื่อ gen_thumbnail.php
โค้ดตามนี้เลย ไฟล์นี้เราเอาไว้สำหรับ include เพื่อเรียกใช้งาน
<?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);
}
?>
ตัวอย่างการใช้งาน
<?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 หรือตัด
ขนาดของรูปให้ได้ตามที่กำหนด โดยหากมีส่วนของรูปส่วนใหญ่ที่เกินขอบเขต
ก็จะถูกตัดออก
<?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 มีพื้นหลังเป็นสีขาว
<?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 เป็นค่าว่าง
<?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
<?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
<img src="show_pic.php">
5. การส่งค่าเพื่อแสดงรูปภาพ url
วิธีนี้จะเป็นการประยุกต์แสดงรูปภาพที่เรามีอยู่แล้ว ออกมาในขนาดต่างๆ
โดยที่ไม่ต้องสร้างเป็นไฟล์เก็บไว้ ซึ่งจะกินพื้นที่จัดเก็บ ทำให้การกำหนดและเรียกใช้ไฟล์
รูปภาพยืดหยุ่น นำไปใช้งานได้หลากหลาย
เช่น เรามีภาพชื่อ oldpic.jpg ขนาด 800 x 1200
ต้องการเรียกใฟล์มาแสดง โดยแสดงไฟล์เป็นขนาด 100 x 100
สร้างไฟล์ชื่อ show_pic.php
<?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
<img src="show_pic.php?src=oldpic.jpg&dst=&w=100&h=100&bg=ffffff&output=&show=1&crop=">
หรือแบบย่อ
<img src="show_pic.php?src=oldpic.jpg&w=100&h=100&bg=ffffff&show=1">
เท่านี้ก็ได้ฟังก์ชั่น จัดการเกี่ยวกับรูปภาพได้หลายรูแบบ และยังสามารถนำไป
ประยุกต์เพิ่มเติม ให้เข้าการใช้งานของแต่ละคนได้