git:https://github.com/exif-js/exif-js
网络路径: <script src="https://cdn.jsdelivr.net/npm/exif-js"></script> //最方便的引入方式
function getPhotoOrientation(img) { //判断ios手机的拍照方向,6就旋转90度
var orient;
EXIF.getData(img, function () {
orient = EXIF.getTag(this, 'Orientation');
});
return orient;
}
var reader = new FileReader();
reader.readAsDataURL(files[0]); //FileReader的方法,把图片转成base64,document.getElementById('file').files[0]的值,直接取值也一样
var size = files[0].size; //图片的大小,最好判断下图片的大小,大于500*1024(500kb)再进行压缩
reader.onload = function(e) {
var src = e.target.result; //base64格式
var img = new Image();
img.src = src;
img.onload = function (e) { //图片加载中
var orient = getPhotoOrientation(img); //调用判断方法,看是否是ios手机拍的照片
//生成canvas
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
var width = img.widht; //可以定义任意的的宽度,压缩图片的效果更好
canvas.width = width;
var height = img.height
canvas.height = img.width;
if (orient == 6) { //ios手机就旋转90度
ctx.save();
ctx.translate(width / 2, height / 2);
ctx.rotate(90 * Math.PI / 180);
ctx.drawImage(img, 0 - height / 2, 0 - width / 2, height, width);
ctx.restore();
} else {
ctx.drawImage(img, 0, 0, width, height);
}
// quality值越小,所绘制出的图像越模糊。压缩图片
var base64 = canvas.toDataURL('image/jpeg', 0.8); //图片格式jpeg或webp可以选0-1质量区间
}
}