1. เริ่มต้นด้วยการติดตั้ง Cropper.js:
ก่อนอื่นเราจะดาวน์โหลดไลบรารี Cropper.js จาก Cropper.js GitHub Repository หรือติดตั้งผ่าน CDN หรือ npm:
npm install cropperjs
หากใช้ CDN ให้เพิ่มลิงก์ดังต่อไปนี้ใน <head> ของไฟล์ HTML:
<link href="https://unpkg.com/cropperjs/dist/cropper.css" rel="stylesheet"> <script src="https://unpkg.com/cropperjs"></script>
2. สร้าง UI สำหรับอัปโหลดรูปภาพ:
สร้างอินพุตสำหรับอัปโหลดรูปภาพ (input file) และสร้างองค์ประกอบ HTML เพื่อแสดงตัวอย่างรูปภาพก่อนครอบตัด:
<input type="file" id="imageInput" accept="image/*"> <div> <img id="imagePreview" style="max-width: 100%; display: none;"> </div> <button id="cropButton" style="display: none;">Crop Image</button> <canvas id="croppedCanvas"></canvas>
3. ตั้งค่าการอัปโหลดและครอบตัดรูปภาพด้วย JavaScript:
จากนั้น เขียนโค้ด JavaScript เพื่อตั้งค่าการครอบตัด โดยจะใช้ Cropper.js เพื่อจัดการกับรูปภาพที่อัปโหลด:
// ดึงองค์ประกอบต่างๆ ใน HTML
const imageInput = document.getElementById('imageInput');
const imagePreview = document.getElementById('imagePreview');
const cropButton = document.getElementById('cropButton');
const croppedCanvas = document.getElementById('croppedCanvas');
let cropper; // ใช้เก็บอินสแตนซ์ของ Cropper
// ฟังก์ชันสำหรับการแสดงรูปภาพที่ถูกอัปโหลด
imageInput.addEventListener('change', (event) => {
const file = event.target.files[0];
const reader = new FileReader();
reader.onload = (e) => {
imagePreview.src = e.target.result;
imagePreview.style.display = 'block';
// สร้าง Cropper บนรูปภาพที่แสดง
cropper = new Cropper(imagePreview, {
aspectRatio: 1, // กำหนดสัดส่วนที่ต้องการ
viewMode: 1,
scalable: true,
zoomable: true,
minCropBoxWidth: 100,
minCropBoxHeight: 100,
});
cropButton.style.display = 'block';
};
reader.readAsDataURL(file);
});
// ฟังก์ชันสำหรับการครอบตัดรูปภาพ
cropButton.addEventListener('click', () => {
// นำข้อมูลจากการครอบตัดไปใส่ใน Canvas
const croppedDataURL = cropper.getCroppedCanvas().toDataURL();
const context = croppedCanvas.getContext('2d');
const croppedImage = new Image();
croppedImage.src = croppedDataURL;
croppedImage.onload = () => {
croppedCanvas.width = croppedImage.width;
croppedCanvas.height = croppedImage.height;
context.drawImage(croppedImage, 0, 0);
};
});
4. การปรับแต่งเพิ่มเติม:
คุณสามารถปรับแต่ง Cropper.js ได้อีกมากมาย เช่น การกำหนดสัดส่วนรูปภาพ (aspectRatio), การเปิด/ปิดการย่อ-ขยาย (zoomable), การเลื่อน (movable), และการเปลี่ยนขนาดครอบ (scalable) เพื่อตอบสนองการใช้งานที่หลากหลาย ตัวอย่างเช่น:
cropper = new Cropper(imagePreview, {
aspectRatio: 16 / 9, // กำหนดสัดส่วน 16:9
viewMode: 2, // ปรับการแสดงผล
movable: true, // เปิดการเลื่อนตำแหน่ง
cropBoxResizable: true, // เปิดการเปลี่ยนขนาดของ Crop Box
});
หากต้องการอัปโหลดรูปภาพที่ครอบตัดไปยังเซิร์ฟเวอร์ คุณสามารถส่งข้อมูลภาพจาก Canvas โดยใช้ FormData ในการจัดการและส่งผ่าน API เช่น:
cropButton.addEventListener('click', () => {
// ส่งข้อมูลไปยังเซิร์ฟเวอร์
const formData = new FormData();
cropper.getCroppedCanvas().toBlob((blob) => {
formData.append('croppedImage', blob);
fetch('/upload', {
method: 'POST',
body: formData,
})
.then((response) => response.json())
.then((data) => {
console.log('Upload Success:', data);
})
.catch((error) => {
console.error('Upload Error:', error);
});
});
});
โค้ดด้านบนจะทำการส่งรูปภาพที่ครอบตัดแล้วในรูปแบบ Blob ผ่าน FormData ไปยังเซิร์ฟเวอร์ที่ระบุที่ endpoint /upload ซึ่งคุณสามารถปรับแต่งเพิ่มเติมได้ตามโครงสร้างและการใช้งาน API ของเซิร์ฟเวอร์ของคุณเอง
การอัปโหลดรูปภาพและครอบตัดภาพสามารถทำได้ง่ายๆ โดยใช้ไลบรารี Cropper.js ซึ่งช่วยให้คุณสามารถจัดการกับรูปภาพได้อย่างสะดวก ทั้งการกำหนดสัดส่วน, การย่อ-ขยาย, และการปรับขนาดของกล่องครอบตัด อีกทั้งยังสามารถนำภาพที่ครอบตัดแล้วไปแสดงบน Canvas หรือนำส่งไปยังเซิร์ฟเวอร์ได้ตามต้องการ
การนำเทคนิคนี้ไปปรับใช้จะช่วยเพิ่มความยืดหยุ่นและความสามารถในการจัดการรูปภาพในโปรเจ็กต์ต่างๆ ของคุณได้มากขึ้น