จริงๆแล้วในการย่อรูปมีโปรแกรมมากมายที่สามารถย่อรูปทีเดียวหลายๆไฟล์ได้ วันนี้เราจะมาลองใช้ javascript ย่อรูปตามสัดส่วนเป็นเปอร์เซ็นในทีเดียวหลายๆรูปซึ่งวิธีนี้มีข้อดีคือการย่อจะทำงานได้เร็วเพราะเป็นการทำงานฝั่ง client ไม่ต้องส่งไฟล์ไปให้กับ server
มาดูตัวอย่างกันครับ
ในหลักการทำทำนั้นจะใช้วิธีการ user upload image ก็ทำการย่อ object รูปและใส่ลง canvas จากนั้น ก็แปลงเป็น blob และบันทึกโดยใช้ filesaver.js
โดยเราจะใช้ library ของ JavaScript ทั้งหมด 3 ตัวได้แก่
1 jQuery
2 filesaver.js
3 canvas to blob
เราไปดู source ผมจะอธิบายแต่ javascript ส่วนอื่นๆสามารถ Download ไปลองศึกษากันได้ครับ
$(document).ready(function(){ function readURL(input) { // function readURL เป็น function หลักในการทำงานหลังจาก user browse file ไฟล์ $.each(input[0].files, function( index, valueinput ) { // each เป็นการ loop ไฟล์ที่อยู่ใน input file ที่มีทั้งหมด if (input[0].value != "" && valueinput.name != "") { // ตรวจว่ามีค่าและชื่อไฟล์หรือเปล่า var reader = new FileReader(); // object file reader สำหรับอ่านไฟล์ใน input reader.onload = function (e) { // onload สั่งให้ทำงานในการโหลดไฟล์ createimage(e.target.result,valueinput.name,valueinput.type); //เรียกใช้ function createimage } reader.readAsDataURL(valueinput); //อ่านรูปภาพ } }); } function createimage(result,name,typex){ // ฟังก์ชั่นนี้ทำหน้าที่ในการ ย่อขนาดรูปตาม % และวาดลง canvas และทำการ save โดยจะมีการรับค่ามา 3 ค่า คือ รูป,ชื่อไฟล์,ชนิดไฟล์ canvas = document.getElementById('Canvas'); // สร้าง canvas จาก html id tag context = canvas.getContext('2d'); imageObj = new Image(); // สร้าง object image var tosize = 100-parseInt($("#size").val()); // ดึงค่า % การย่อว่ากี่ % จาก select id size imageObj.onload = function() { // ฟังก์ชั่นขนาดโหลดรูป canvas.width = (this.width*tosize/100); // ปรับขนาดรูปและ canvas ให้เป็นไปตาม % canvas.height = (this.height*tosize/100) imageObj.width = (this.width*tosize/100); imageObj.height = (this.height*tosize/100) context.drawImage(imageObj, 0, 0,this.width,this.height); // วาดรูปลงใน canvas // แปลง canvas ไปเป็น Blob if (canvas.toBlob) { canvas.toBlob( function (blob) { saveAs(blob, name); // ใส่ให้ browser save รูป }, typex //ชนิดไฟล์ ); } context.clearRect(0, 0, canvas.width, canvas.height); // เคลียค่า canvas }; imageObj.src = result; // ใส่รูปให้กับ object image } $( ".saveimage" ).click(function() { // ใช้ jquery ดัก event เมื่อ user กดปุ่มย่อและบันทึก readURL($("#imagebroswer")); // เรียก readURL return false; }); });
JavaScript ทั้งหมดก็มีเท่านี้ครับ
ตัวอย่างเบื้องต้นนี้ยังขาดในหล่ายๆส่วน เช่น validate ชนิดไฟล์ ขนาดไฟล์ หรือปรับปรุง ui และการทำงาน แต่ก็น่าจะทำให้ทราบ concept และความสามารถของ js ว่ามีความสามารถหลากหลายจริงๆ
ลองนำ Code ไปเล่นกันดูครับ