การ Resize ภาพ ได้ที่ล่ะหลาย ๆ ภาพ และทำ Thumnail
ผมได้ดูจากบทความของอาจารย์แล้ว ไม่เข้าใจตรงที่จะเอามาใช้ได้อย่างไรครับ ถึงจะทำ Thumnail ได้ และผมจะมาดัดแปลงทำอัพทีเดียวหลาย ๆ ไฟล์ได้หรือไม่
<? 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;
}
?>
<?php
$image = resizeImage($_FILES[iconupload][tmp_name], $album_dir, $picture, $config[album][pic_width]);
if(!$image) {
echo 'ไม่สามารถอัปโหลดรูปภาพได้';
} else {
print_r($image);
}
?>
จากโค้ดนี้ผมยังงงครับ ว่าจะเอามาใช้ได้อย่างไร ใช้ตอนเอารูปออกมาโชว์ หรือ ตอนโพสครับ กำหนดค่าไม่ถูกจริง ๆ ครับ รบกวนช่วยแนะนำด้วยครับ หากมีตัวอย่างให้ดาว์นโหลดจะขอบคุณยิ่งนักครับผม ขอบพระคุณล่วงหน้าครับ
<? 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;
}
?>
<?php
$image = resizeImage($_FILES[iconupload][tmp_name], $album_dir, $picture, $config[album][pic_width]);
if(!$image) {
echo 'ไม่สามารถอัปโหลดรูปภาพได้';
} else {
print_r($image);
}
?>
จากโค้ดนี้ผมยังงงครับ ว่าจะเอามาใช้ได้อย่างไร ใช้ตอนเอารูปออกมาโชว์ หรือ ตอนโพสครับ กำหนดค่าไม่ถูกจริง ๆ ครับ รบกวนช่วยแนะนำด้วยครับ หากมีตัวอย่างให้ดาว์นโหลดจะขอบคุณยิ่งนักครับผม ขอบพระคุณล่วงหน้าครับ
$image = resizeImage($_FILES[iconupload][tmp_name], $album_dir, $picture, $config[album][pic_width])
หมายถึงเราจะ resize ตอนอัปโหลดครับ ให้ทำการสังเกตุโค้ดกันนิดนึงครับ ชื่อแต่ละอย่างก็สื่อความหมายของมันครับ
ส่วนการ resize ทีละหลายๆไฟล์ทำได้ครับ ตามจำนวนการอัปโหลดที่เข้าไป ซึ่งขึ้นกับการออกแบบ เรียกฟังก์ชั่นนี้ 1 ครั้ง resize ได้ 1 ไฟล์ครับ
ถ้าจะทำ คงต้องศึกษาและนำมาใช้ร่วมกันหลายๆบทความครับ บทความที่เกี่ยวข้องมีอยู่แล้วทั้งหมดบนเว็บ ซึ่งต้องประยุกต์ใช้เอาครับ