Skip to content


สร้าง Square Thumbnail แบบ Facebook กันเถอะ

งง Thumbnail แบบ Facebook คืออะไร ความจริงแล้วผมก็ไม่อยากอ้างถึง Facebook ซักเท่าไหร่ แต่ก็เป็นเพราะว่า ผมไปเห็นการสร้าง Thumbnail แบบนี้ครั้งแรกที่ Facebook ครับ ดังนั้น ใครจะบอกว่า เฮ้ย ของที่นั่นที่นี่ตะหาก อันนั้นก็แล้วแต่ครับ แค่ผมเห็นที่ Facebook เท่านั้นเองครับ

ตามลอจิกของมันก็ไม่ได้ยุ่งยากอะไรครับ แต่จะแตกต่างจากที่เราเคยคิดในเรื่องการสร้าง Thumbnail ทั่ว ๆ ไป คือ ไม่ใช่แค่ย่อรูปลงมา แต่เราจะ Crop เอาเฉพาะส่วนที่ต้องการ ทำให้เราได้ Thumbnail ที่เป็นรูปสี่เหลี่ยมจัตุรัสครับ

หลักการง่าย ๆ คือ เราจะย่อลงมาให้ด้านที่สั้นที่สุดให้มีขนาดตามที่ต้องการ หลังจากนั้นก็ทำการ Crop รูปที่เหลือให้เป็นสี่เหลี่ยมจัตุรัสตามขนาดที่เราเลือกเท่านั้นเองครับ

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

เมื่อได้ลอจิกง่าย ๆ ตามนี้แล้ว ก็จะได้ Code ตามนี้ครับ

function create_square_thumb($srcimg, $thumbimg, $size)
{
$src = imagecreatefromjpeg($srcimg);
if (!$src) return FALSE;

list($w, $h) = getimagesize($srcimg);
$nw = 0;
$nh = 0;
$sx = 0;
$sy = 0;
if ($w > $h)
{
$nh = $size;
$nw = $size * $w / $h;
$sx = ($w - $h) / 2;
$ss = $h;
}
else
{
$nw = $size;
$nh = $size * $h / $w;
$sy = ($h - $w) / 2;
$ss = $w;
}

$tmp = imagecreatetruecolor($size, $size);
if (!$tmp) return FALSE;

if (imagecopyresampled($tmp, $src, 0, 0, $sx, $sy, $size, $size, $ss, $ss))
return imagejpeg($tmp, $thumbimg, 100);
return FALSE;
}

วิธีเรียกใช้งานก็ง่ายดายเหลือเกินครับ แค่

bool create_square_thumb(<ชื่อรูปต้นฉบับ>, <ชื่อรูป Thumbnail ที่ต้องการ>, <ขนาดความกว้างของรูป Thumbnail ที่ต้องการ>);

ใครที่สร้างไฟล์ไม่ได้ก็อย่าลืม set permission ของ path ปลายทางให้สามารถ write ได้ด้วยนะครับ (เช่น 777)

  • Share/Bookmark

Posted in Image, PHP, function.

Tagged with , , , , , .


9 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. exboy says

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

  2. chonla says

    ครับ ก็เป็นไปได้ครับ แต่เท่าที่ผมลองแล้ว ค่อนข้างพอใจครับ หัวแหว่งไปบ้าง แต่ก็ไม่ถึงกับน่าเกลียดครับ

  3. ฟิวส์ says

    เคยเขียนลักษณะนี้ครับ
    ลอจิกเมหือนที่ว่าคือ
    ย่อก่อนให้ได้ขนาดด้านหนึ่งที่ต้องการ
    แล้ว crop ตรงกลางอีกที
    แทบจะ 90% ครับ
    จะครอบครุมหมดทั้งรูป
    จะมีก็แต่ถ่ายแล้ว object ชิดขอบภาพมากๆ ก็จะแหว่งไปหน่อย

    :D

  4. ilumin says

    เอามาดัดแปลงให้เข้ากับ jquery ที่ใช้ crop รูป
    รับค่า x, y, h, y ของ crop
    แล้วใช้ function นี้ตัด

  5. ilumin says

    อุ๊ยเขียนผิดต้อง x, y, h, w

  6. chonla says

    ครับ ภาพโดยส่วนใหญ่ก็ถ่ายออกมาโดยที่วัตถุที่ต้องการจะอยู่ไม่ติดขอบอยู่แล้วครับ ผมใช้คำว่าส่วนใหญ่นะครับ ดังนั้น การย่อภาพด้วยวิธีนี้ผมถึงคิดว่าน่าจะดีครับ

  7. dexter says

    ลองเอาไปใช้งานแล้ว ok เลยครับ

    ขอบคุณมากครับ

  8. chonla says

    ยินดีครับ

Continuing the Discussion

  1. ‘- Meawznoy -’ » PHP - Thumbnails & Viewer linked to this post on May 10, 2009

    [...] ก็ search ไปเจอ สร้าง Square Thumbnail แบบ Facebook กันเถอะ [...]



Some HTML is OK

or, reply to this post via trackback.