TL; DR;
มีวิธีบีบอัดรูปภาพ (ส่วนใหญ่เป็น jpeg, png และ gif) โดยตรงทางฝั่งเบราว์เซอร์ก่อนที่จะอัปโหลดหรือไม่? ฉันค่อนข้างมั่นใจว่า JavaScript สามารถทำได้ แต่ฉันไม่สามารถหาวิธีที่จะบรรลุมันได้
นี่คือสถานการณ์ทั้งหมดที่ฉันต้องการนำไปใช้:
- ผู้ใช้ไปที่เว็บไซต์ของฉันและเลือกรูปภาพผ่าน
input type="file"
องค์ประกอบ - ภาพนี้เรียกดูผ่าน JavaScript เราทำการตรวจสอบบางอย่างเช่นรูปแบบไฟล์ที่ถูกต้องขนาดไฟล์สูงสุดเป็นต้น
- หากทุกอย่างเรียบร้อยจะมีการแสดงภาพตัวอย่างบนหน้า
- ผู้ใช้สามารถดำเนินการขั้นพื้นฐานบางอย่างเช่นหมุนภาพ 90 ° / -90 °ครอบตัดตามอัตราส่วนที่กำหนดไว้ล่วงหน้า ฯลฯ หรือผู้ใช้สามารถอัปโหลดภาพอื่นและกลับไปที่ขั้นตอนที่ 1
- เมื่อผู้ใช้พอใจภาพที่แก้ไขจะถูกบีบอัดและ "บันทึก" ไว้ในเครื่อง (ไม่ได้บันทึกลงในไฟล์ แต่อยู่ในหน่วยความจำ / หน้าของเบราว์เซอร์) -
- ผู้ใช้กรอกแบบฟอร์มด้วยข้อมูลเช่นชื่ออายุ ฯลฯ
- ผู้ใช้คลิกที่ปุ่ม "เสร็จสิ้น" จากนั้นแบบฟอร์มที่มีข้อมูล + รูปภาพที่บีบอัดจะถูกส่งไปยังเซิร์ฟเวอร์ (ไม่มี AJAX)
กระบวนการทั้งหมดจนถึงขั้นตอนสุดท้ายควรทำในฝั่งไคลเอ็นต์และควรเข้ากันได้กับ Chrome และ Firefox, Safari 5+ และIE 8+รุ่นล่าสุด ถ้าเป็นไปได้ควรใช้เฉพาะ JavaScript เท่านั้น (แต่ฉันค่อนข้างมั่นใจว่าเป็นไปไม่ได้)
ฉันไม่ได้เขียนโค้ดอะไรในตอนนี้ แต่ฉันได้คิดถึงมันแล้ว การอ่านไฟล์ในเครื่องสามารถทำได้ผ่านFile API การดูตัวอย่างและแก้ไขรูปภาพทำได้โดยใช้องค์ประกอบCanvasแต่ฉันหาวิธีทำส่วนบีบอัดรูปภาพไม่ได้
ตามhtml5please.comและcaniuse.comสนับสนุนเบราว์เซอร์เหล่านั้นเป็นเรื่องที่ค่อนข้างยาก (ขอบคุณ IE) แต่สามารถทำได้โดยใช้ polyfill เช่นFlashCanvasและFileReader
จริงๆแล้วเป้าหมายคือการลดขนาดไฟล์ดังนั้นฉันจึงเห็นว่าการบีบอัดภาพเป็นวิธีแก้ปัญหา แต่ฉันรู้ว่ารูปภาพที่อัปโหลดจะปรากฏบนเว็บไซต์ของฉันทุกครั้งในที่เดียวกันและฉันรู้ขนาดของพื้นที่แสดงผลนี้ (เช่น 200x400) ดังนั้นฉันสามารถปรับขนาดภาพให้พอดีกับขนาดเหล่านั้นได้ซึ่งจะลดขนาดไฟล์ลง ฉันไม่รู้ว่าอัตราส่วนการบีบอัดของเทคนิคนี้จะเป็นเท่าใด
คุณคิดอย่างไร ? คุณมีคำแนะนำที่จะบอกฉัน? คุณรู้วิธีบีบอัดรูปภาพฝั่งเบราว์เซอร์ใน JavaScript หรือไม่? ขอบคุณสำหรับการตอบกลับ