บทความนี้เป็นเทคนิคการทำ สกรีนแคปเจอร์ หน้าเว็บ ด้วย javascript ซึ่ง user สามารถเลือก ตำแหน่งที่ต้องการ แคปเจอร์และบันทึกเป็น รูปภาพได้
ตัวอย่างหลังจากทำเสร็จแล้วครับ
plugin ที่ใช้ในงานนี้จะประกอบด้วย
- jquery
- Bootstrap
- html2canvas (ใช้สำหรับการแปลง html เป็น cavans)
- imgareaselect (เป็น ui สำรับ crop image )
อธีบายวีธีการทำงาน ในส่วน js ที่สำคัญ
1 หลังจาก user กดปุ่ม screen capture ด่านล่างแล้ว จะใช้คำสั่ง html2cavans แปลง html ใน div class ชื่อว่า sereen เป็น canvas
2 ทำการแปลง canvas เป็น image และ append เข้าใน div class ชื่อว่า onscreen เพื่อแสองรูปทั้งหมดของหน้าเว็บไซต์
3 เรียกใช้ plugin imgareaselect เพื่อทำให้ user เลือกส่วนที่ต้องการ
4 จับ event onselectend ใน imageselect และนำค่า x,y,width,height ที่ได้ มา crop image ใน canavas และส่งค่าไปให้ปุ่ม save รูปภาพ
$( ".print" ).click(function() { // evnet click capture icon function crateimage(img, selection){ // function สำหรับจับ event imageselectend var canvas = document.getElementById('output'); var context = canvas.getContext('2d'); var imageObj = new Image(); var imagename; imageObj.onload = function() { canvas.width = selection.width; canvas.height = selection.height; // สร้าง cavans ขึ้นมาให้มตามขนาดที่ user เลือก context.drawImage(imageObj, selection.x1,selection.y1,selection.width,selection.height,0,0,selection.width,selection.height); var d = new Date(); // ส่งค่่ารูปให้กับปุ่มบันทึก $(".saveimg").attr("href",canvas.toDataURL("image/png")); // กำหนดชื่อไฟล์ตอน save ผมใส่ date เขาไปหลายอันจะได้ไม่ซำกัน $(".saveimg").attr("download","captue"+d.getDate()+d.getDate()+d.getFullYear()+d.getHours()+d.getMilliseconds()); } imageObj.src = img.src; } html2canvas($(".screen"), { // แปลงจาก html เป็น cavans onrendered: function(canvas) { var image = new Image(); var img = '<img id="image_edit" src="'+canvas.toDataURL("image/png")+'">'; // แปลง cavans เป็น image และสร้าง tag img html มาให้ม var imgselect; $(".onscreen").html(img).promise().done(function(){ // ใส่รูปลงใน div class onscreen $(".screen").hide(); $(".print").hide(); $(".onscreen").show(); $(".save").show(); imgselect = $('#image_edit').imgAreaSelect({ // init imgareaselect handles: true, instance: true, show:true, onSelectEnd: crateimage // จับ event ด้วย function crateimage }); $(".save").click(function() { // จับ event ปุ่ม save ข้อมูล imgselect.cancelSelection(); // ล้างค่า img AreaSelect $(".print").show(); $(".onscreen").hide(); $(".screen").show(); $(this).hide(); }); }); } }); });
ตัวอย่าง SOURCE CODE
ตัวอย่างนี้สามารถใช้ได้ใน browser รุ่นใหม่ๆ ส่วนรุ่นเก่าคงจะไม่สามารถทำได้
หากท่านใดมีข้อสงสัยในตัว code หรือ มีคำถามเกี่ยวกับการทำเว็บ สามารถสอบถามได้ครับ