Вот суть, которая делает это:
https://gist.github.com/dcollien/312bce1270a5f511bf4a
(версия es6 и версия .js, которые могут быть включены в тег скрипта)
Вы можете использовать его следующим образом:
<input type="file" id="select">
<img id="preview">
<script>
document.getElementById('select').onchange = function(evt) {
ImageTools.resize(this.files[0], {
width: 320, // maximum width
height: 240 // maximum height
}, function(blob, didItResize) {
// didItResize will be true if it managed to resize it, otherwise false (and will return the original file as 'blob')
document.getElementById('preview').src = window.URL.createObjectURL(blob);
// you can also now upload this blob using an XHR.
});
};
</script>
Он включает в себя множество средств обнаружения поддержки и полифилов, чтобы обеспечить работу на максимально возможном количестве браузеров.
(он также игнорирует GIF-изображения - в случае, если они анимированы)