สร้างรูปภาพใหม่จากรูปภาพเดิมพร้อมปรับขนาด

เป็นการสร้างรูปภาพใหม่จากรูปภาพเดืมโดยใช้ GD Library โดยให้ผลลัพท์เป็นรูปภาพ JPG ที่ปรับขนาดแล้ว โดยมีการรักษาอัตราส่วนภาพให้คงเดิมทำให้รูปภาพไม่บิดเบี้ยว แต่หากรูปภาพมีขนาดเล็กกว่าที่ต้องการอยู่แล้วจะเป็นการสำเนารูปภาพไปยังปลายทางโดยอัตโนมัติ เหมาะสำหรับการใช้สร้างรูป thumbnail หรือรูปขนาดเล็กสำหรับแสดง รวมไปถึงการจำกัดขนาดของรูปภาพที่จัดเก็บไม่ให้มีขนาดใหญ่เกินไป เป็นต้น

function resizeImage($source, $target, $name, $width) {
  // Exif
  $imageinfo = getImageSize($source);
  // ปรับขนาดรูปถ้า $source มีขนาดใหญ่กว่าค่า $width
  if ($imageinfo[0] > $width || $imageinfo[1] > $width) {
   //คำนวณขนาดใหม่
   if ($imageinfo[0] <= $imageinfo[1]) //รูปสูงกว่ากว้าง
    {
    $h = $width;
    $w = round($h * $imageinfo[0] / $imageinfo[1]);
   } else {
    $w = $width;
    $h = round($w * $imageinfo[1] / $imageinfo[0]);
   }
   switch ($imageinfo[mime]) {
    case 'image/gif':
     $o_im = imageCreateFromGIF($source);
     break;
    case 'image/jpg':
    case 'image/jpeg':
    case 'image/pjpeg':
     $o_im = imageCreateFromJPEG($source);
     break;
    case 'image/png':
    case 'image/x-png':
     $o_im = imageCreateFromPNG($source);
     break;
   }
   // สร้าง รูป jpg จากรูปที่ส่งเข้ามา
   $o_wd = @imagesx($o_im);
   $o_ht = @imagesy($o_im);
   // สร้าง image ใหม่ ขนาดที่กำหนดมา
   $t_im = @ImageCreateTrueColor($w, $h);
   // วาดลงบน image ใหม่
   @ImageCopyResampled($t_im, $o_im, 0, 0, 0, 0, $w + 1, $h + 1, $o_wd, $o_ht);
   // jpg เท่านั้น
   $newname = substr($name, 0, strrpos($name, '.')).'.jpg';
   if (!@ImageJPEG($t_im, $target.$newname)) {
    $ret = false;
   } else {
    $ret[name] = $newname;
    $ret[width] = $w;
    $ret[height] = $h;
   }
   @imageDestroy($o_im);
   @imageDestroy($t_im);
   return $ret;
  } elseif (@copy($source, $target.$name)) {
   $ret[name] = $name;
   $ret[width] = $imageinfo[0];
   $ret[height] = $imageinfo[1];
   return $ret;
  }
  return false;
 }

$source = ชื่อไฟล์รวม path ของรูปภาพต้นทาง เช่น ที่ได้มาจากการอัปโหลด
$target = path ที่เก็บไฟล์ที่สร้างใหม่$name = ชื่อของรูปภาพใหม่
$width = ความกว้างของรูปภาพใหม่ที่ต้องการ

รูปภาพที่ถูกสร้างใหม่จะมีขนาด กว้าง*ยาว ไม่เกิน $width
ถ้ามีการปรับขนาดรูปภาพใหม่จะเป็น JPG เท่านั้น
รองรับไฟล์ภาพ jpg,gif และ png
ค่าคืนกลับ ชื่อ ความกว้าง และความสูง ของรูปภาพใหม่ (ชื่อจะถูกเปลี่ยนนามสกุลเป็น JPG โดยอัตโนมัติ หากมีการปรับขนาด)
ไม่สำเร็จคืนค่า false

ตัวอย่าง :
$image = resizeImage($_FILES[iconupload][tmp_name], $album_dir, $picture, $config[album][pic_width]);
if(!$image) {
    echo 'ไม่สามารถอัปโหลดรูปภาพได้';
} else {
    print_r($image); 
}
ผู้เขียน goragod โพสต์เมื่อ 08 ม.ค. 2552 เปิดดู 9,948 ป้ายกำกับ PHP
^