เคยเจอปัญหาเว็บโหลดช้าเพราะรูปภาพขนาดใหญ่หรือเปล่า? 📷 ถ้าใช่ Next.js มีฟีเจอร์ Image Optimization ที่ช่วยให้รูปภาพโหลดเร็วขึ้น อัตโนมัติ ไม่ต้องไปใช้พวก TinyPNG หรือ Cloudinary เองเลย
🌟 ทำไมต้องใช้ Image Optimization ใน Next.js?
✅ ลดขนาดไฟล์รูปภาพ โดยอัตโนมัติ 📉
✅ รองรับการแปลงเป็น WebP ที่โหลดเร็วกว่า JPEG/PNG ⚡
✅ รองรับ Lazy Loading โหลดเฉพาะตอนที่รูปจะถูกแสดง 💤
✅ รองรับการปรับขนาดรูปแบบอัตโนมัติ ตามหน้าจอผู้ใช้ 📱
✅ ทำให้ SEO ดีขึ้น เพราะเว็บโหลดเร็ว 🚀
วันนี้เราจะมาเรียนรู้วิธีใช้ Next.js Image Optimization อย่างมือโปร 💪
📌 เริ่มต้นใช้งาน Image Optimization ใน Next.js
Next.js มีคอมโพเนนต์ <Image> ที่ช่วยจัดการรูปภาพอัตโนมัติ ให้ใช้แทน <img> ปกติ
📂 สร้างไฟล์ pages/index.js แล้วใส่โค้ดนี้
import Image from 'next/image';
export default function Home() {
return (
<div>
<h1>🚀 ใช้ Next.js Image Optimization</h1>
<Image
src="/images/sample.jpg"
alt="รูปตัวอย่าง"
width={500}
height={300}
/>
</div>
);
}
🔹 อธิบายโค้ด
- <Image> – ใช้แทน <img>
- src – พาธของรูปภาพ (ใช้ /public/images/sample.jpg)
- alt – คำอธิบายรูป (สำคัญต่อ SEO)
- width & height – กำหนดขนาดรูป (Next.js ปรับขนาดให้เหมาะสม)
🎯 เปรียบเทียบ <Image> กับ <img>
| คุณสมบัติ | <Image> (Next.js) | <img> (HTML) |
|---|---|---|
| Lazy Loading | ✅ อัตโนมัติ | ❌ ต้องเพิ่ม loading="lazy" เอง |
| ปรับขนาดรูปอัตโนมัติ | ✅ | ❌ |
| รองรับ WebP | ✅ | ❌ |
| SEO Friendly | ✅ | ❌ |
💡 สรุป: ใช้ <Image> จะช่วยให้รูปภาพโหลดเร็วขึ้น โดยที่เราไม่ต้องทำอะไรเพิ่มเลย!
🖼 ใช้ Image Optimization กับรูปภาพจากภายนอก
ถ้ารูปภาพของคุณ อยู่ใน CDN หรือโดเมนอื่น ต้องเพิ่มโดเมนนั้นใน next.config.js
📂 แก้ไขไฟล์ next.config.js
module.exports = {
images: {
domains: ['example.com', 'cdn.example.com'],
},
};
🔹 ตัวอย่างการใช้รูปจาก CDN
<Image
src="https://example.com/image.jpg"
width={500}
height={300}
alt="รูปจาก CDN"
/>
Next.js ต้องการควบคุมความปลอดภัยและประสิทธิภาพ จึงไม่ให้โหลดรูปจากภายนอกโดยตรง ถ้าไม่ระบุไว้
📏 ปรับขนาดรูปภาพอัตโนมัติ
สามารถใช้ layout เพื่อให้รูปภาพปรับขนาดตามคอนเทนต์ได้
🔹 layout="responsive" (ขนาดเปลี่ยนตามหน้าจอ)
<Image
src="/images/sample.jpg"
alt="รูปตัวอย่าง"
layout="responsive"
width={16}
height={9}
/>
📌 ภาพจะปรับขนาดตามสัดส่วน 16:9 โดยอัตโนมัติ
🔹 layout="intrinsic" (ขนาดเท่าต้นฉบับ)
<Image
src="/images/sample.jpg"
alt="รูปตัวอย่าง"
layout="intrinsic"
width={500}
height={300}
/>
📌 ภาพจะใช้ขนาดจริงของไฟล์ และขยายตามหน้าจอ
🔹 layout="fill" (ให้รูปเต็มพื้นที่ของ container)
<div style={{ position: 'relative', width: '100%', height: '400px' }}>
<Image
src="/images/sample.jpg"
alt="รูปตัวอย่าง"
layout="fill"
objectFit="cover"
/>
</div>
📌 รูปจะถูกยืดให้เต็ม container และ objectFit="cover" ป้องกันการเสียสัดส่วน
⚡ เปลี่ยนฟอร์แมตรูปเป็น WebP อัตโนมัติ
Next.js รองรับ WebP โดยไม่ต้องแปลงเอง!
<Image
src="/images/sample.jpg"
alt="รูปตัวอย่าง"
width={500}
height={300}
quality={80}
/>
📌 Next.js จะสร้างรูปแบบ WebP อัตโนมัติถ้าผู้ใช้รองรับ
🔄 ใช้ Blur Effect สำหรับรูปโหลดช้า
Next.js มี blur effect ช่วยให้รูปที่โหลดช้า ไม่ทำให้หน้าเว็บดูแย่
<Image
src="/images/sample.jpg"
alt="รูปตัวอย่าง"
width={500}
height={300}
placeholder="blur"
blurDataURL="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."
/>
📌 ภาพจะมีเอฟเฟกต์เบลอจนกว่าจะโหลดเสร็จ
🔥 ใช้ Next.js Image API
Next.js มี API สำหรับ Resize และ Optimize รูป อัตโนมัติ
📌 ตัวอย่างการใช้ API
https://yourdomain.com/_next/image?url=/images/sample.jpg&w=500&q=75
🔹 w=500 → ปรับขนาดรูปเป็น 500px
🔹 q=75 → ลดคุณภาพให้เหลือ 75%
📌 สรุป
✅ ใช้ <Image> แทน <img> เพื่อให้เว็บโหลดเร็ว
✅ รองรับ Lazy Loading และ WebP อัตโนมัติ
✅ ปรับขนาดรูป ให้เหมาะสมกับทุกอุปกรณ์
✅ ใช้ layout ต่างๆ เพื่อให้รูปแสดงผลตามต้องการ
✅ ใช้ API ของ Next.js ช่วย Optimize รูปให้เบาและเร็ว
อยากให้เว็บโหลดเร็ว + SEO ดีขึ้น? ใช้ Next.js Image Optimization เลย! 🚀