In short:
- Read the files using the HTML5 FileReader API with .readAsArrayBuffer
- Create a Blob with the file data and get its url with window.URL.createObjectURL(blob)
- Create new Image element and set it’s src to the file blob url
- Send the image to the canvas. The canvas size is set to desired output size
- Get the scaled-down data back from canvas via canvas.toDataURL(“image/jpeg”,0.7) (set your own output format and quality)
- Attach new hidden inputs to the original form and transfer the dataURI images basically as normal text
- On backend, read the dataURI, decode from Base64, and save it
Source: code.